服务器反爬虫攻略

上次服务器突然瘫痪了,我花了一整夜的时间查看日志,分析apache的访问日志,发现同一个时间段(大概下午3点左右)有好几个爬虫的访问痕迹 (百度、google、搜狗、雅虎、搜搜、还有一个不知名的爬虫),他们一起来光临服务器(因为服务器上面当时放在大概十多个独立网站,导致爬虫们同时光 临)导致服务器在那一时段流量大增,机房打电话来说流量异常,我当时正在银行办支票的入账。赶紧火急火燎的跑回办公室,直接ping服务器,发现time out,ssh连接不上,赶紧打电话给机房让他们帮忙重启服务器,事情才算基本结束。我开始以为应该是黑客攻击,因为我的server自从上线大概半年多 来,已经经历了2次黑客攻击,但是基本上就是web shell或者ftp丢失等引起的,这次事件刚刚开始的时候我还是以为是黑客攻击引起的,没曾想罪魁祸首是这些爬虫们。问题找出来了,得想想办法解决啊, 怎么办呢?服务器不可能禁止所有的爬虫访问,但是任由爬虫这么个爬法,严重影响了服务的资源利用,会导致网站访问速度缓慢,甚至无法访问。看来我还得花点 时间来解决下这个棘手的问题。
按理说,禁止某个爬虫访问很简单,直接用robots就ok了,比如我要屏蔽百度爬虫
可以直接在robots.txt中加入如下代码:

  1. #所有爬虫
  2. User-agent: *
  3. Disallow:/

  4. # 屏蔽google爬虫访问后台管理
  5. User-agent: Googlebot
  6. Disallow:/admin

  7. # 屏蔽Sosospider访问后台管理
  8. User-agent: Sosospider
  9. Disallow:/admin

  10. #屏蔽百度爬虫访问后台管理
  11. User-agent: Baiduspider
  12. Disallow: /admin

但 实际上,这种方法在某些情况下,对某些爬虫而言,并不能完全屏蔽百度的爬虫(特别是个别采集器,采集我的博客文章 (http://www.kokkowon.com)),要不要爬取网站,基本上由爬虫说了算,百度要抓取,这个方法是拦不住的,因为据我所知,很多爬虫 根本就不遵守robots协议(唉,this is in china,没有办法)。因此要向完全屏蔽百度的爬虫,需要其他的手段了。记得以前在某网站使用服务器方防止图片盗链的思路,比如禁止网站/data和 public目录下所有图片被盗链,可以通过在.htaccess文件中加入代码:

  1. RewriteEngine on
  2. RewriteBase /
  3. RewriteCond %{REQUEST_URI} ^/(data|public)

  4. ##add by lin at 2009-11-02 禁止flv的访问
  5. RewriteCond %{REQUEST_FILENAME} .flv$[NC]

  6. #允许空“HTTP_REFERER”的访问,即允许用户在浏览器地址栏中直接输入图片地址时图片文件的显示
  7. RewriteCond %{HTTP_REFERER} !^$ [NC]

  8. #设置允许访问的HTTP来源
  9. RewriteCond %{HTTP_REFERER} !xxx.com [NC]

  10. #定义被盗链时替代的图片,让所有盗链 jpg、gif、png 等文件的网页,显示根目录下的 no.png 文件
  11. RewriteRule .*\.(gif|jpg|png)$ http://www.xxx.com/no.png [R,NC,L]

  12. #将不满足上述条件的全部重定向到no.png,add by lin at 2009-11-02
  13. RewriteRule (.*) http://www.xxx.com/no.png [R,NC,L]

上面那段代码可以禁止图片和相关资源的盗链,改改应该也是可以禁止爬虫的访问的。于是修改.htaccess文件添加

  1. RewriteEngine on
  2. RewriteCond %{HTTP_USER_AGENT} ^Baiduspider [NC]
  3. RewriteRule .* - [F]

用 PHP模拟访问网站,发现确实有效果。但是我们有十几个网站,我不可能每个网站挨个去给他们修改.htaccess,有的网站已经有.htaccess文 件,如果贸然修改,可能会导致原来网站访问不正常,怎么办呢?我们能不能修改apache的配置文件,做一个全局的设置,把不应来的爬虫拒之门外?修改配 置文件:

  1. SetEnvIfNoCase User-Agent "^(Baiduspider|Sosospider)" not_allowed_spider

  2. #仅对指定的HTTP方法进行访问控制
  3. Order Allow,Deny
  4. Allow from all
  5. Deny from env=not_allowed_spider

用 PHP模拟访问网站,果然可行,搞定,终于可以禁止爬虫瞎爬了,明天可以睡个安稳觉了。另外还有很多防止爬虫的策略和方法,可以参考robbin的一篇文 章,里面讲述了爬虫的识别和防护等相关技巧(http://robbin.iteye.com/blog/451014 )

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值