< 返回上层

Apache利用USER_AGENT屏蔽恶意蜘蛛

2018-12-05 22:19:37 73次

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


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



 


.htaccess

SetEnvIfNoCase 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也一样啦,对这些恶意蜘蛛没那么讲究)把他们转走。


.htaccess

RewriteCond %{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://www.googel.com/ [L]

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


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


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


提交成功!非常感谢您的反馈,我们会继续努力做到更好!

更多建议

这条文档是否有帮助解决问题?

没有帮助 有帮助

非常抱歉未能帮助到您。为了给您提供更好的服务,我们很需要您进一步的反馈信息:

在文档使用中是否遇到以下问题: