3

有没有办法通过 php 脚本阻止一些用户代理?关于 mod_security 的示例

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 中。任何示例代码?

4

2 回答 2

13

我喜欢@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();
}
于 2009-08-31T15:34:03.693 回答
2

您应该避免为此使用正则表达式,因为这会添加大量资源来决定阻止连接。相反,只需使用 strpos() 检查字符串是否存在

if (strpos($_SERVER['HTTP_USER_AGENT'], "Agent Name 1") !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], "Agent Name 2") !== false
 || strpos($_SERVER['HTTP_USER_AGENT'], "Agent Name 3") !== false) {
    exit;
}
于 2009-08-31T15:26:06.067 回答