我想判断一下服务器端对我的php页面的请求是否是AJAX请求.

我看到了两种方法:

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

mypage.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');

mypage.php:

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

事实上,这两种方法很容易被黑客攻击,所以判断我是否收到这样的AJAX请求是不安全的.

如何判断是否收到AJAX请求?

推荐答案

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

Php相关问答推荐

无法添加ProxyClass__setInitialized()上的忽略

中继器内置中继器的ACF WordPress组

laravel中获取的数据会自动更改时间戳值

在PHP 8.2 Gloogle云引擎上加载大型php文件速度缓慢

返回WooCommerce中的所有已启用变体

在PHP中使用curl命令执行SCRAPYD操作.json不返回任何内容

根据WooCommerce Cart小计阈值自动应用优惠券

为什么WooCommerce的动作钩子';woocommerce_checkout_update_order_review';包含旧信息?

在WooCommerce中以编程方式添加特定产品后,将价格设置为零

为什么从一个页面到另一个页面都找不到 JQuery,因为它们使用相同的 twig 模板?

使用 phpseclib 验证 RSA-PSS

无法读取某些 WordPress 主机上的 cookie

带有分类术语数组的 WordPress Elementor 自定义查询 - 如何要求所有术语都在返回的帖子中

如何在 Process facade 中转义特殊字符?

自定义错误页面不适用于 Apache 和 nginx 设置的 .htaccess

password_verify 在 PHP 7.4 中有效,但在 PHP 8.2 中无效

Laravel 响应 html 默认页面忽略控制器

Symfony 在将它传递给 Twig 时是否从数据库中获取整个对象?

如何将在同一台服务器上运行的 2 个 PHP 应用程序与使用公共会话分开

无法按今天加上 7 天显示数据库项目