我正在向我的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
这里有什么问题?
答案 0 :(得分:1)
按原样保留data
:
data: request,
您不需要对其进行字符串化。
此外,您的file
参数允许攻击者从您的文件系统中读取任意文件。消毒它。
答案 1 :(得分:1)
尝试沟渠processData: false
和contentType: 'application/html'
,它应该有效
$.ajax({
type: 'POST',
url: cgi_file,
data: request,
dataType: 'html',
success:function(response){
console.log("received " + response);
}
});
答案 2 :(得分: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会将您的数据作为标准帖子发送到您的服务器端代码。