0

我正在向我的 PHP 脚本发送一个 ajax 调用,如下所示:

function load(){
    var request = {};
    request['action'] = 'load';
    request['file'] = 'lorem_ipsum.txt';
    $.ajax({
        type: 'POST',
        url: cgi_file,
        data: JSON.stringify(request),
        processData: false,
        dataType: 'html',
        contentType: 'application/html',
        success:function(response){
            console.log("received " + response);
        }
    });
}

我的PHP脚本如下:

$content_dir = '/static/content/';

$action = $_POST['action'];

switch ($action){
    case 'load':
        $file = $_POST['filename'];
        echo file_get_contents($content_dir . $file);
        exit();
}

PHP 以以下失败响应:

Notice: Undefined index: action in /var/www/river/api.php on line 5

这里有什么问题?

4

3 回答 3

1

保持data原样:

data: request,

您不需要对其进行字符串化。

此外,您的file参数允许攻击者从您的文件系统中读取任意文件。对其进行消毒。

于 2013-01-27T04:25:08.270 回答
1

尝试沟渠processData: falsecontentType: 'application/html'它应该工作

$.ajax({
    type: 'POST',
    url: cgi_file,
    data: request,
    dataType: 'html',
    success:function(response){
        console.log("received " + response);
    }
});
于 2013-01-27T04:47:02.883 回答
0

这里有一些问题,首先contentType属性是您发送到服务器的数据,其次 dataType 应该设置text为您从服务器接收的数据。如果您想接收$_POST数组中的数据,您的 javascript 应该如下所示,

$.ajax({
    type: 'POST',
    url: cgi_file,
    data: {
        action: "load",
        file: "lorem_ipsum.txt";
    },
    dataType: 'text',
    success:function(response){
        console.log("received " + response);
    }
});

Jquery 会将您的数据作为标准帖子发送到您的服务器端代码。

于 2013-01-27T05:01:35.790 回答