通过其Java引用程序或用户代理string阻止机器人?

我在我的日志中获取了大量的网页点击,抓取了我网站的大多数顶级页面,并将引用者显示为Java版本。

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

有时候,但并不总是,我得到一个404 /联系/但没有其他页面下面。

根据蜜jar项目,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] 

注:我在共享主机,并有限制访问Apacheconfiguration。

用户代理string匹配不是可靠的方法,因为任何人都可以在标题上进行更改。

从我的经验来看,每个面向networking服务器的互联网都类似于爬行和冲浪(就是这一点,对吧?:)。

如果有的话,他们只是爬你的networking服务器索引的某种。 如果你想挫败或限制这些请求的频率,我build议apache mod_evasive,或mod_dosevasive,或mod_qos,以限制每秒每IP的并发连接数,等等。

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

然后,你需要编写403禁止自己定义一套从抓取行为的规则到你的PHP应用程序,当机器人学习你的Apache mods evasive频率设置。

AllowOverride是否设置为全部?

作为更合适的解决scheme,我会build议使用mod_evasive [1]阻止任何客户端的过度扫描。 不过需要iptables。

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