我的网站是这样的,用户打开它并运行index.php,在index.php中,有许多ajax调用与index.php在同一服务器目录中的其他php脚本。现在我正在使用post,但是如果用户知道这些其他脚本的地址(例如从右键单击--->查看页面源),那么他可以在浏览器中运行这些脚本,这会导致不便(例如,有时会导致要插入数据库的空白条目,只是一个例子)。那么如何从浏览器中禁用这些脚本的php执行,而ajax可以调用它们呢?
答案 0 :(得分:2)
您不能,至少不可靠(例如,您可以使用JavaScript添加额外的请求标头,但用户可以观察这些请求并自行添加标头)。
检查提交的数据是否正确。如果提交添加空白条目,则返回错误消息。
答案 1 :(得分:-1)
你应该检查php脚本是否是Ajax Reponse
/* AJAX check */
if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {
echo 'call from ajax'; //here you have call request by ajax
}
else
{
die("You shouldn't be here");
}
/* not ajax, do more.... *
大多数知名的JS库都使用此标头。如果您不使用库,可以自己设置此标题。
var req = new XMLHttpRequest();
req.setRequestHeader("HTTP_X_REQUESTED_WITH", "xmlhttprequest");
攻击者篡改数据时可以设置这些标题,但对于想要通过浏览器访问页面的普通人来说,它会显示“你不应该在这里”的消息。
答案 2 :(得分:-2)
以下是我用来检测AJAX请求的内容:
function isAjax()
{
/* AJAX check */
return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}
请注意,这不保证检测,只能帮助阻止被误导的用户,而不是确定的攻击者。