如何检查页面是否直接访问?

时间:2011-06-03 16:23:35

标签: php

嗨:) 我想禁止直接访问页面,我的意思是如果有人试图访问例如页面

  

proccess.php

他会收到一条错误消息。 但!如果通过AJAX调用访问该页面,它将正常运行。

我试过了:

if( preg_match( '/' . basename( __FILE__ ) . '/', $_SERVER['REQUEST_URI'] ) )
{
 die("Error!");
}

但问题是,当我通过AJAX调用访问它时,它就像我直接访问它一样......

请帮助:)

3 个答案:

答案 0 :(得分:6)

您可以查看HTTP_X_REQUESTED_WITH标题。

if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
  // ajax request
} else {
  die('direct access is forbidden');
}

还在stackoverflow上阅读Can the “x-requested-with” http header be spoofed?

答案 1 :(得分:0)

 if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
     die("Error!");
 }

可能就足够了吗?

答案 2 :(得分:0)

一个简单的解决方案是在调用此脚本之前调用此脚本的所有脚本中设置一个变量(true,false,一个字符串......真的是任何东西)。它调用process.php 。然后process.php中的顶行应为“

if ($checkVar === NULL) {

    die("Permission denied!");

}

但这需要您编辑调用流程页面的所有页面。