您好我有一个jquery函数,它使用ajax调用将信息发送到php页面。它使用get方法发送此信息。我对此的关注是,如果用户直接进入php页面并在url中输入一些get变量,该怎么办?虽然php脚本没有处理敏感数据,但我仍然希望ajax调用能够与脚本而不是用户进行交互(通过在浏览器中输入url)。怎么办呢?
js code
$.ajax({
type: "GET",
url: "/add.php",
data: 'id=' + itemid,
dataType: "json",
success: function (data) {
document.getElementById("name").innerHTML = data[0];
document.getElementById("desc").innerHTML = data[1];
document.getElementById("price").innerHTML = data[2];
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
php code
$output = array();
$output[0] = $itemname . " " . $_GET['id'];
$output[1] = $itemdescription;
$output[2] = $itemprice;
echo json_encode($output);
exit();
Unfortunatley我不能使用POST方法,因为这与某些代码冲突。
答案 0 :(得分:1)
大多数ajax框架(比如jQuery)都在发送HTTP_X_REQUESTED_WITH
标题。已经描述了如何检索它的Here值。
我认为不建议使用标头值来保护您的脚本,因为您可以操作请求标头(例如curl)。您使用哪种方法,GET
,POST
,PUT
或DELETE
并不重要,您的服务器端api必须是安全的。如果您想阻止对该网址的重复调用,请查看验证码服务或将uid添加到仅有效一次的网址。
答案 1 :(得分:0)
对于POST或GET请求,如果您在数据库中进行插入,则必须执行 - 安全表格 - 安全发布数据
另外,您应该考虑使用键/值数组
$output = array(
'id' => $_GET['id'],
'name' => $itemname,
'description' => $itemdescription,
'price' => $itemprice
);
echo json_encode($output);
JS
$.ajax({
type: "GET",
url: "/add.php",
data: 'id=' + itemid,
dataType: "json",
success: function ( item ) {
document.getElementById("name").innerHTML = item.name + " " + item.id;
document.getElementById("desc").innerHTML = item.description;
document.getElementById("price").innerHTML = item.price;
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
要安全化你的ajax查询,你必须转义html实体,sql注入。 为了安全表单,您可以为每个表单生成一个令牌,并在将数据发送到服务器之前对其进行编码,客户端将无法读取您要发送给服务器的数据类型。
在服务器端,您可以在插入之前解码。