cc和抓取的防御方法

最近个人站被一SB给爬了,之前没发现,都爬了几个月了。之所以是SB就是拿着个火车头就认为自己爬遍网络无阻拦了。记录一下最近对防抓的研究和理解

防抓可以分为主动和被动,主动被动是对于网站来说的。下面的策略都得先过滤掉蜘蛛

被动防御
  1.统计单位时间内单个IP的访问次数
  2.统计单位时间内单个UA的访问次数(针对火车头)

主动防御
  1.302跳转
  2.js跳转
  3.cookie验证

前两个没啥好说的,很简单的,着重说一下后面三个的实现方式

302跳转
302跳转主要是对访问的ip随机的进行一次302跳转,而跳转的时候在原始url后面加上几个参数,一般抓取程序或者cc攻击不会去识别header,设定一个阀值,当一个IP多次不跳转的时候就可以干掉他了。而如果成功进行了跳转的话,一般就可以认为是正常的用户,那么我们可以设置一个cookie值以及时效,当然cookie的值是经过ip和一些特殊参数计算出来的,不能让别人给破解了,然后在这个时效内不会再对用户进行探测

js跳转
其实js跳转也跟上面类似,不过跳转的方式是通过js来进行的。当一个请求来的时候可以吐出一个简单的js跳转,然后再原始的url后面加上一些参数,接下来的一些验证什么的就跟上面302跳转一样了

cookie验证
cookie验证是当用户第一次访问的时候就给他种下cookie,并记录访问次数,如果第二次来访问没cookie的话可以再次尝试种cookie,当cookie回传失败次数大于某个阀值就可以干掉这个IP了。

其实这些都有现成的实现了,用的nginx+lua来实现的,项目地址是:HttpGuard 我给他加上了文件黑名单功能以及对UA的封锁

文章来源:

Author:花生
link:http://wenjun.org/?p=1118