-1

我的网站是这样的,用户打开它并运行 index.php,并且在 index.php 中有许多对与 index.php 相同的服务器目录中的其他 php 脚本的 ajax 调用。现在我正在使用 post,但是如果用户知道这些其他脚本的地址(例如通过右键单击 ---> 查看页面源代码),那么他可以在他们的浏览器中运行这些脚本,这可能会导致不便(例如,有时会导致空白要插入到数据库中的条目,只是一个示例)。那么如何从浏览器禁用这些脚本的 php 执行,而 ajax 可以调用它们呢?

4

3 回答 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 回答