头像

jlqwer

这让人揪心的代码

《Apache利用USER_AGENT屏蔽恶意蜘蛛》

 3月前  •   WEB, 笔记  •   , ,  •   168  •   0

最近发现日志里有很多没见过的蜘蛛UA,基本上都是国外的一些搜索引擎,或者很本不是搜索引擎,有的抓取频率很高,刚开始设置了下robots.txt,因为他们首先都抓取了robots.txt,应该是遵守规则的,没想到人家只是走个过场,并没有把robot.txt放在眼里。

记得Apache可以用.htaccess文件来通过useragent来屏蔽一些访问,搜了一下,大概可以这么做:

 

.htaccessSetEnvIfNoCase User-Agent ^.*Scrapy.* bad_bot
SetEnvIfNoCase User-Agent ^.*SemrushBot.* bad_bot
SetEnvIfNoCase User-Agent ^.*ExtLinksBot.* bad_bot
SetEnvIfNoCase User-Agent ^.*YandexBot.* bad_bot
SetEnvIfNoCase User-Agent ^.*MauiBot.* bad_bot
SetEnvIfNoCase User-Agent ^.*Python.* bad_bot
SetEnvIfNoCase User-Agent ^.*NetcraftSurveyAgent.* bad_bot
Deny from env=bad_bot

这样当这些匹配的useragent就会被返回403禁止访问。

可是第二天发现有几个useragent疯狂的访问robot.txt,反正都不遵守规则,那么执着的访问robots.txt干什么。。。。。

于是我换了一种方法,打算用302(301也一样啦,对这些恶意蜘蛛没那么讲究)把他们转走。

.htaccessRewriteCond %{HTTP_USER_AGENT} ^.*Scrapy.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*ExtLinksBot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*YandexBot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*MauiBot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*Python.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*SemrushBot.* [NC,OR]
RewriteCond %{HTTP_USER_AGENT} ^.*NetcraftSurveyAgent.* [NC]
RewriteRule ^(.*)$ http://tip.imlhx.com/ [L]

这样,就都被302到tip.imlhx.com了,现在再看那些未知的蜘蛛基本不会在主站乱爬了。

另:.htaccess的正则:”^”代表字符串的开始,”.*”代表任意字符。

NC代表不区分大小写,OR代表或者,L的意思是一旦有符合条件的规则就不再执行下面的规则,所以这些语句要放在WordPress等程序默认伪静态规则的前面。

上一篇:
下一篇:

 评论


 已有0条评论

    还没有任何评论,你来说两句吧!