如何使用php阻止某些http用户代理
有没有办法通过php脚本阻止一些用户代理?mod_安全示例如何使用php阻止某些http用户代理,php,user-agent,Php,User Agent,有没有办法通过php脚本阻止一些用户代理?mod_安全示例 SecFilterSelective HTTP_USER_AGENT "Agent Name 1" SecFilterSelective HTTP_USER_AGENT "Agent Name 2" SecFilterSelective HTTP_USER_AGENT "Agent Name 3" 我们也可以通过示例使用htaccess或robots.txt来阻止它们,但我需要php。有任何示例代码吗?您应该避免使用正则表达式,因为这
SecFilterSelective HTTP_USER_AGENT "Agent Name 1"
SecFilterSelective HTTP_USER_AGENT "Agent Name 2"
SecFilterSelective HTTP_USER_AGENT "Agent Name 3"
我们也可以通过示例使用htaccess或robots.txt来阻止它们,但我需要php。有任何示例代码吗?您应该避免使用正则表达式,因为这会增加很多资源来阻止连接。相反,只需检查strpos()中是否有字符串
我喜欢@Nerdling的答案,但如果你有一个很长的需要阻止的用户代理列表,那么这可能会有所帮助:
$badAgents = array('fooAgent','blahAgent', 'etcAgent');
foreach($badAgents as $agent) {
if(strpos($_SERVER['HTTP_USER_AGENT'],$agent) !== false) {
die('Go away');
}
}
更好的是:
$badAgents = array('fooAgent','blahAgent', 'etcAgent');
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
exit();
}
为什么你认为使用regexp“会增加很多资源”?因为PHP的网站上这么说。你应该使用strpos($str)!=false,因为子字符串可以定位在索引0处,并且测试>0将失败。strpos()页面上有一条特别关于类型测试的说明。无论如何,对于2个以上的用户代理,这将是首选方法。是的。。更好,但工作良好,只是测试与感谢卡里姆。
$badAgents = array('fooAgent','blahAgent', 'etcAgent');
if(in_array($_SERVER['HTTP_USER_AGENT'],$badAgents)) {
exit();
}