在URL中使用斜杠时崩溃Ajax请求

时间:2014-07-14 18:42:32

标签: php jquery ajax .htaccess

我有一个简单的项目,用于在Url重新编写时测试Ajax请求,如下所示:

htaccess:

Options +FollowSymLinks  
RewriteEngine On  

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  



RewriteRule ^(.*)$ index.php?param=$1

index.php:

<?php 

if (!isset($_GET['param'])){

    include('home.php');

}


if (isset($_GET['param'])){

include('tick.php');

}

?>

home.php:

<h1>HOME</h1>

tick.php:

$(document).ready(function ($) {    

     $.ajax({
    type: "POST",
    url: "php/request.php", 
    dataType: "json",   
    data: {k_name:'book'},
        success: function (data) {

      //ghtml();

        }
      })

  }

request.php:

<?php 

require("config.inc.php");
require("Database.singleton.php");

$k_name=$_POST['k_name'];
$data = array();

//Connect To DB
    $db= new Database(DB_SERVER, DB_USER, DB_PASS, DB_DATABASE);
    $db->connect();


    $sql = "SELECT id, name FROM table1 WHERE name=$k_name ";
    $rows = $db->fetch_array($sql);



    foreach($rows as $record){
        $data[] = array('id' => $record['id'], 'name' => $record['name']); 
    }



echo json_encode(array_values($data));
 ?>

当Url是:

http://localhost/ajax/aaaa

注意:我的文件夹项目名称是Ajax。

Ajax请求工作正常,但在Url中使用斜杠时:

http://localhost/ajax/aaaa/

Ajax请求崩溃,我现在必须使用框架来减少请求调度,但我不明白这个问题为什么会发生。

1 个答案:

答案 0 :(得分:0)

你没有崩溃AJAX。您的代码中存在sql injection attack漏洞并且缺少任何形式的错误处理:

您直接将AJAX值插入查询中:

$sql = "SELECT id, name FROM table1 WHERE name=$k_name ";
                                               ^^^^^^^

导致查询:

SELECT ... WHERE name=foo

除非您的表中有一个名为foo的字段,否则会导致语法错误并终止查询。但是,由于您没有任何错误处理,您只需假设查询永远不会失败并继续处理错误的数据。

您可能已经让fetch个调用吐出有关调用非对象输出方法的PHP警告。并且由于您调用JS代码期望JSON返回作为响应,该错误将导致JSON解析错误,等等等等。

简而言之,如果您对最小的基本错误处理感到困扰,这可能会被阻止:

if (query failed) {
   output json error message
} else {
   process query results
}

从不永远假设成功。总是假设失败,并将成功视为一个惊喜。有一种方法可以使查询成功,并且几乎有无数种方法可以使其失败。欢迎您来到拉斯维加斯的赌场,因为您将这种无穷无尽的机会视为“保证成功”。