通过 Java 引荐来源或用户代理字符串来阻止机器人?

通过 Java 引荐来源或用户代理字符串来阻止机器人?

我的日志中收到了很多网络点击,这些点击抓取了我网站的大多数顶级页面,并将引荐来源显示为 Java 版本。

我在引荐来源中看到了 Java 版本的不同变体,即 Java/1.6.0_04、Java/1.4.1_04、Java/1.7.0_25 等。

有时(但并非总是),我会得到 /contact/ 的 404 错误,但下面的其他页面都不会出现错误。

根据 Project Honeypot 的说法,这些 IP 通常都是垃圾邮件收集器和机器人

78.129.252.190 - - [24/Jan/2014:01:28:52 -0800] "GET / HTTP/1.1" 200 6728 "-" "Java/1.6.0_04" 198 7082
78.129.252.190 - - [24/Jan/2014:01:28:55 -0800] "GET /about HTTP/1.1" 301 - "-" "Java/1.6.0_04" 203 352
78.129.252.190 - - [24/Jan/2014:01:28:55 -0800] "GET /about/ HTTP/1.1" 200 29933 "-" "Java/1.6.0_04" 204 30330
78.129.252.190 - - [24/Jan/2014:01:28:56 -0800] "GET /articles-columns HTTP/1.1" 301 - "-" "Java/1.6.0_04" 214 363
78.129.252.190 - - [24/Jan/2014:01:28:57 -0800] "GET /articles-columns/ HTTP/1.1" 200 29973 "-" "Java/1.6.0_04" 215 30370
78.129.252.190 - - [24/Jan/2014:01:28:58 -0800] "GET /contact HTTP/1.1" 301 - "-" "Java/1.6.0_04" 205 354
78.129.252.190 - - [24/Jan/2014:01:28:58 -0800] "GET /contact/ HTTP/1.1" 200 47424 "-" "Java/1.6.0_04" 206 47827

他们在寻找什么?弱点?

我可以通过 Java 引荐来源阻止这些访问吗?如果可以,该怎么做?或者使用 php 函数?

我知道如何在 .htaccess 中阻止 IP,但对我来说,通过 User-agent 阻止是一种更主动的方法)。

更新 2/04/14 我无法使用这两条规则中的任何一条来阻止 Java 用户代理。

RewriteCond %{HTTP_USER_AGENT} Java/1.6.0_04
RewriteRule ^.*$ - [F]

RewriteCond %{HTTP_USER_AGENT} ^Java
RewriteRule ^.*$ - [F]

注意:我使用共享主机,并且对 apache 配置的访问权限有限。

答案1

用户代理字符串匹配不是可靠的方法,因为任何人都可以更改标题上的它。

根据我的经验,每个面向互联网的网络服务器都类似于被抓取和浏览(这就是重点,对吧?:)。

无论如何,他们只是在抓取您的网络服务器以进行某种索引。如果您想阻止或限制这些请求的频率,我建议使用 apache mod_evasive、mod_dosevasive 或 mod_qos 来限制每个 IP 每秒的并发连接数等。

请记住,此解决方案可能会导致您的网络服务器阻止来自 NAT 路由请求等的合法请求。

然后,当机器人了解您的 apache mods 规避频率设置时,您需要自己编写 403 禁止代码,将一组规则从爬行行为定义到您的 php 应用程序中。

答案2

AllowOverride 是否设置为 All?

作为更合适的解决方案,我建议使用 mod_evasive[1] 来阻止任何客户端的过度扫描。但需要 iptables。

  1. http://www.zdziarski.com/blog/?page_id=442

相关内容