我的网站是这样的,用户打开它并运行 index.php,并且在 index.php 中有许多对与 index.php 相同的服务器目录中的其他 php 脚本的 ajax 调用。现在我正在使用 post,但是如果用户知道这些其他脚本的地址(例如通过右键单击 ---> 查看页面源代码),那么他可以在他们的浏览器中运行这些脚本,这可能会导致不便(例如,有时会导致空白要插入到数据库中的条目,只是一个示例)。那么如何从浏览器禁用这些脚本的 php 执行,而 ajax 可以调用它们呢?
问问题
1431 次
3 回答
2
您不能,至少不可靠(例如,您可以使用 JavaScript 添加额外的请求标头,但用户可以观察这些请求并自己添加标头)。
检查提交的数据是否正常。如果提交添加空白条目,则返回错误消息。
于 2013-06-11T12:12:27.407 回答
-1
如果是 Ajax 响应,您应该检查 php 脚本
/* 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");
当攻击者篡改数据时可以设置这些标头,但对于想要通过浏览器访问页面的普通人,它将显示“你不应该在这里”消息。
于 2013-06-11T12:13:10.043 回答
-2
这是我用来检测 AJAX 请求的方法:
function isAjax()
{
/* AJAX check */
return (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
}
请注意,这并不能保证检测到,只能帮助阻止被误导的用户,而不是坚定的攻击者。
于 2013-06-11T12:13:19.803 回答