PHP禁用浏览器执行

时间:2013-06-11 12:09:53

标签: php ajax web

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

3 个答案:

答案 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.... *

Source of code

大多数知名的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');
}

请注意,这不保证检测,只能帮助阻止被误导的用户,而不是确定的攻击者。