当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在PHP中检测Ajax并确保请求来自我自己的网站》经验,为你挑选了3个好方法。

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

这为我提供了可靠的检测,确保使用AJAX技术进行请求.

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

www.example.com/ajax?true可以允许任何人拨打AJAX电话并剪切信息.

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

这些天有甚么重要吗?



1> Gordon..:

让你控制器

生成访问令牌

存储在会话中以供稍后比较

在你的视图中

将访问令牌声明为JS变量

每个请求发送令牌

回到你的控制器

验证HTTP_X_REQUESTED_WITH

验证令牌

从OpenAjax检查这些安全准则.
另外,请阅读Anniehorror.com上链接的文章.


这不会阻止机器人直接击中API.它可以像JavaScript应用程序一样获取访问令牌.
+1由于基于浏览器的AJAX请求会针对每个请求发送cookie - 您只需在每个页面上添加令牌检查.

2> Annie..:

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

回应,"这些日子甚至是重要的" - 是的,确实如此!读这个.


我不确定这种方法会通过默默无闻来完成除安全之外的任何事情.制作一个Web请求是微不足道的,这是一个Ajax请求.检查Javascript包装器并添加它将添加的任何内容只是稍微不那么简单.所有这一切都是模拟会话令牌.

3> Jim..:

关于你的最后一个问题:"在这些日子里,它是否重要?" 这是一个案例问题.如果ajax请求正在做一些不需要安全性的事情(例如加载最新股票报价)那么恕我直言并不重要.如果请求正在加载应该保护的信息(例如,返回标识信息或在服务器上执行某些操作),那么您应该将其视为此类.

我个人不使用服务器变量来知道什么是ajax请求.相反,我只是向ajax调用添加一个查询参数(例如http://domain.com/?ajax=true).如果我需要保护ajax调用,那么我将使用相同的方法来保护常规页面请求(使用客户端和服务器).正如Lucas Oman指出的那样,客户端的任何东西都可以伪造.即使您认为它来自您的站点或数据库,底线也不信任任何请求.始终遵循"过滤器输入 - 逃逸输出"的口头禅.

推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有