Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查传入的请求是来自浏览器、ajax还是PHP中的REST调用?_Php_Rest - Fatal编程技术网

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

如何检查传入的请求是来自浏览器、ajax还是PHP中的REST调用?,php,rest,Php,Rest,基本上,我想检测传入的http请求是否来自浏览器?我想通过web服务和ajax停止所有其他机器人调用?希望这有帮助:良性网络爬虫和礼貌的ajax站点 不会隐藏他们的真实身份。这两个标题应足以检查: $\u服务器['HTTP\u X\u REQUESTED\u WITH']-只要存在标头(归功于) $\u SERVER['HTTP\u USER\u AGENT']-您必须收集典型子字符串的列表,以区分机器人和浏览器 很多尊敬的人给了你一个很好的推荐信,他应该给你一个答案 狡猾邪恶的机器人 将战

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

希望这有帮助:

良性网络爬虫和礼貌的ajax站点 不会隐藏他们的真实身份。这两个标题应足以检查:

  • $\u服务器['HTTP\u X\u REQUESTED\u WITH']
    -只要存在标头(归功于)
  • $\u SERVER['HTTP\u USER\u AGENT']
    -您必须收集典型子字符串的列表,以区分机器人和浏览器
很多尊敬的人给了你一个很好的推荐信,他应该给你一个答案

狡猾邪恶的机器人 将战斗升级到一个完全不同的级别,但是如果你付出比机器人开发者愿意付出更多的努力,你也可以智胜他们。你可以

  • 限制来自同一IP的请求
  • 检查
    $\u服务器['HTTP\u REFERER']
    ,或者在没有任何
  • 保留最近点击的历史记录,并且仅当有来自相同IP的请求且具有相同HTTP头时,才提供子资源
  • 不断更改主页中的链接或某些安全参数,并仅使用最新的安全令牌回答请求。在安全参数中对请求者IP进行哈希编码,以阻止对站点的分布式滥用
  • 在复杂的客户端javascript中创建一些加密哈希,这是现代浏览器可以做到的,但简单的机器人无法做到
  • 如果点击量很大,则记录完整的HTTP头并研究统计数据,以发现机器人与人类访客的不同模式。我认为这是你在不干扰你的网站的有效人类用户的情况下所能做的极限
  • 继续并请求验证码
我所说的安全参数是指



,其中,param是通过一些非平凡的计算从salt、访问者的IP地址、一年中的某一天、会话ID cookie、用户代理字符串以及可能的其他内容中派生出来的。

如果您依赖此技术来确保安全,请不要使用此技术。因为标题可能被恶意用户欺骗!这可能不适用于您的情况,但可能适用于查看此问答的其他用户。

您可以检查用户代理标题。但这很容易伪造。禁止在
robots.txt
中使用机器人@我想在php代码中检测它。我尝试了USER\u AGENT头,但有一长串。@PankajGarg,
$\u服务器['HTTP\u USER\u AGENT']
?看看这个长长的列表:@majidarif:我已经尝试过这个方法,并且已经看到了这个解决方案,但是否有更好的方法可以轻松检测传入http请求的类型,以便我可以进行相应的编程?首先,我只想允许来自浏览器的调用。因此,检测ajax并不是完整的解决方案。其次,您可以通过curl_setopt($ch,CURLOPT_HTTPHEADER,array(“X-request-With:XMLHttpRequest”))手动设置这个参数;请在回答中至少提到
$\u服务器['HTTP\u X\u REQUESTED\u WITH']
,这样会更好。人们实际上使用stackoverflow作为参考,而另一个页面可能会下降。浏览器只是一个计算机程序,无论它能做什么,另一个(邪恶的)机器人也能做什么。要识别人类访客,您需要验证码之类的东西@PankajGarg您需要什么级别的保护?仅仅来自良性网络爬虫还是邪恶攻击者?@MKaama->仅仅来自良性网络爬虫还是邪恶攻击者?是的,但如果可能的话,我想在这些请求之间找到一个温和的检测。但是,如果你建议从攻击中拯救,将会奏效!