如何在nginx中阻止特定的人类用户代理

时间:2013-03-24 14:17:24

标签: nginx

我最近遇到了垃圾邮件的一些问题,机器人正在注册,所有这些防验证码系统似乎都没有工作。

我已经分析了我的访问日志并发现人们不使用用户代理可能是因为他们已经老了......但是也注意到有一些HEAD / GET / POST /攻击也会进入Web服务器在用户代理上使用完全相同的字符串。可能是使用与垃圾邮件/添加机器人相同的用户代理的引导程序。

  

216.151.139.172 - - [24 / Mar / 2013:00:58:20 +0000]“GET /index.php?action=verificationcode;vid=register;rand=12c64196f4558b2dff00db7ed3ee8ad9   HTTP / 1.1“200 2189”index.php?action = register“”Mozilla / 4.0   (兼容; MSIE 7.0; Windows NT 5.1; Trident / 4.0; .NET CLR   1.1.4322)“” - “

在没有阻止所有用户代理的nginx中,无论如何只是阻止useragent中包含的这个字符串,这样这些机器人就可以停止注册和广告。

  

“Mozilla / 4.0(兼容; MSIE 7.0; Windows NT 5.1; Trident / 4.0; .NET CLR 1.1.4322)”

感谢阅读。

2 个答案:

答案 0 :(得分:3)

你可以试试这个

if ($http_user_agent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322)") {
  return 444; # 444 is a special nginx status code that's useful in fighting attack
}

但该用户代理字符串有效,这意味着您也可以阻止某些合法访问。

我建议你尝试基于ip的访问控制。请参阅http://wiki.nginx.org/HttpAccessModule进行设置。在我看来这更好。

答案 1 :(得分:0)

$str = "hyper text-markup_language";
$res = preg_split('~[\s_-]+~', $str, 0, PREG_SPLIT_NO_EMPTY);
print_r($res);
// => Array ( [0] => hyper [1] => text [2] => markup 3] => language )

有关此检查的大量信息,请参阅以下链接 https://www.nxtcloud.io/block-unwanted-user-agent-traffic-on-nginx/