在PHP中检测Ajax并确保请求来自我自己的网站

2022-08-30 11:03:31

我使用我的PHP后端通过检查中的值来检测AJAX请求。$_SERVER['HTTP_X_REQUESTED_WITH']

这为我提供了可靠的检测,确保使用AJAX技术发出请求。

如何确保请求来自我自己的域,而不是外部域/机器人?

www.example.com/ajax?true 可以允许任何人进行AJAX调用并剪切信息。

我可以为正常进入我网站的每个人创建会话,然后允许AJAX调用。但这也可以伪造。

这些天这有什么关系吗?


答案 1

让你控制器

  • 生成访问令牌
  • 在会话中存储以供以后比较

在视图中

  • 将访问令牌声明为 JS 变量
  • 随每个请求一起发送令牌

回到控制器中

  • 验证HTTP_X_REQUESTED_WITH
  • 验证令牌

查看OpenAjax的这些安全指南。
另外,请阅读有关安妮链接 codinghorror.com 的文章。


答案 2

您可以检查HTTP_REFERRER,但并非所有浏览器都设置了它。最好的方法是在JavaScript端为ajax调用编写一个包装器,它将 document.cookie 的一部分发送回服务器 - 只有您的域有权访问该 Cookie。您可以将请求标头中的 Cookie 与 php 中 AJAX 调用中的 Cookie 进行比较。

作为回应,“这些天这还重要吗”——是的,确实如此!阅读此内容


推荐