如何检查用户是否试图在没有数据发送到服务器的情况下手动访问脚本


How to check if user is trying to access script manually with no data sent to the server?

假设我有一个名为test.php的脚本我想知道如何检查用户是否试图手动访问example.com/test.php,如果是,则抛出一个禁止的错误var_dump(http_response_code(403));以下是我的代码:

if($conditions)
     var_dump(http_response_code(403));

以下是我想要的$条件:

  • 用户未登录
  • 用户对手动访问该脚本没有"兴趣"。也就是说,我想检查是否有$_POST或$_GET,如果没有,则抛出禁止的错误

$conditions=$NOT_LOGGED||(!isset($_POST)&amp!isset($_GET)

问题是,AFAIK,用户只需访问example.com/test.php就是$_GET。。。所以这个代码会失败。我想要的是一种防污染的方法,以确保用户确实在尝试手动操作(是的,我完全知道用户可以手动操作,例如example.com/test.php?but_thats=not_my_point。有人能帮我吗?tyvm!

这很简单:检查所有必须满足的条件才能使请求有效,如果不符合,则每一个条件都会失败。

if ($_SERVER['REQUEST_METHOD'] !== 'GET') {
    header('HTTP/1.0 405 Method Not Allowed');
    exit();
}
if (/* user is not logged in */) {   // fill in your user authentication here
    header('HTTP/1.0 403 Forbidden');
    exit();
}
if (!isset($_GET['foo'])) {
    header('HTTP/1.0 400 Bad Request');
    exit();
}
echo 'Hi! ', $_GET['foo'];