如何在PHP中检查传入的请求是浏览器,ajax还是REST调用?

时间:2014-04-23 07:10:43

标签: php rest

基本上我想检测传入的http请求来自浏览器?我想通过Web服务和ajax停止所有其他机器人调用吗?

3 个答案:

答案 0 :(得分:2)

希望这会有所帮助:Detecting-Ajax

答案 1 :(得分:1)

良好的WEB抓取工具和礼貌的AJAX网站

不会隐藏自己的真实身份。这两个标题应该足以检查:

  • $_SERVER['HTTP_X_REQUESTED_WITH'] - 标题的存在(信用转到Nataraj
  • $_SERVER['HTTP_USER_AGENT'] - 您必须收集典型子字符串列表才能告诉机器人和浏览器

很多人尊重 /robots.txt Tichodroma muraria给了你一个很好的参考,他应该发布一个答案。

狡猾的邪恶机器人

将战斗升级到一个完全不同的水平,但如果你付出的努力比机器人开发者愿意的更多,你也可以胜过它们。例如。你可以

    来自同一IP的
  • 限制请求
  • 检查$_SERVER['HTTP_REFERER'],或者,如果没有,
  • 保留最近点击的历史记录,只有来自同一 IP 的主页面请求具有相同的 HTTP标头
  • 不断更改主页面中的链接或某些安全参数,并仅使用最近的安全令牌回复请求。在安全参数中对请求者IP的哈希值进行编码,以阻止对您网站的分布式滥用行为
  • 在复杂的客户端 javascript 中创建一些加密哈希,这是现代浏览器可以做的,但简单的机器人不能
  • 如果点击量很高,则记录完整的HTTP标头并研究统计信息,以发现机器人与人类访问者不同的模式。我认为这是您可以做的限制而不会打扰您网站的有效人类用户
  • 继续并要求 CAPTCHA

根据安全参数,我的意思是

http://example.com/?param=78364528
,其中 param 是通过 salt ,访问者的IP地址,一年中的一天, sessionid Cookie,用户代理字符串,也许还有别的东西。

答案 2 :(得分:0)

如果您依赖它是安全的,请不要使用此技术。因为标头可能被恶意用户欺骗!这可能不适用于您的情况,但可能适用于查看此Q& A的其他用户。