如何使用 PHP 检查请求是否是 AJAX 请求

新手上路,请多包涵

我想检查服务器端对我的 php 页面的请求是否是 ajax 请求。

我看到了两种方法:

第一种方式:在请求中发送 GET 参数,告诉页面这是一个 AJAX 请求(= mypage.php?ajax

我的页面.php:

 if(isset($_GET['ajax'])) {
    //this is an ajax request, process data here.
}

第二种方式:将标题设置为 xmlHttpRequest

客户端js:

 xmlHttpRequestObject.open(“GET”,url,true);
xmlHttpRequestObject.setRequestHeader('X-Requested-With', 'XMLHttpRequest');

我的页面.php:

 if (!empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) {
    //request is ajax
}


事实是,这两种方法很容易被黑客入侵,因此检查我是否收到这样的 AJAX 请求并不安全。

如何检查我是否收到 AJAX 请求?

原文由 BackSlash 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 389
2 个回答

没有可靠的方法知道请求是通过 Ajax 发出的。您永远不能相信来自客户端的数据。您可以使用几种不同的方法,但可以通过欺骗轻松克服它们。

原文由 Wayne Whitty 发布,翻译遵循 CC BY-SA 3.0 许可协议

尝试使用 HTTP_SEC

   if (!array_key_exists("HTTP_SEC_FETCH_SITE",$_SERVER) || $_SERVER["HTTP_SEC_FETCH_SITE"] != "same-origin")
    die(header("HTTP/1.1 404 Not Found"));
  if (!array_key_exists("HTTP_SEC_FETCH_MODE",$_SERVER) || $_SERVER["HTTP_SEC_FETCH_MODE"] != "cors")
    die(header("HTTP/1.1 404 Not Found"));
  if (!array_key_exists("HTTP_SEC_FETCH_DEST",$_SERVER) || $_SERVER["HTTP_SEC_FETCH_DEST"] != "empty")
    die(header("HTTP/1.1 404 Not Found"));

原文由 Smar ts 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题