常见的反爬虫和应对方法【岂安低调分享】

0x01 常见的反爬虫

这几天在爬一个网站,网站做了很多反爬虫工作,爬起来有些艰难,花了一些时间才绕过反爬虫。在这里把我写爬虫以来遇到的各种反爬虫策略和应对的方法总结一下。

从功能上来讲,爬虫一般分为数据采集,处理,储存三个部分。这里我们只讨论数据采集部分。

一般网站从三个方面反爬虫:用户请求的Headers,用户行为,网站目录和数据加载方式。前两种比较容易遇到,大多数网站都从这些角度来反爬虫。第三种一些应用ajax的网站会采用,这样增大了爬取的难度。

0x02 通过Headers反爬虫

从用户请求的Headers反爬虫是最常见的反爬虫策略。很多网站都会对Headers的User-Agent进行检测,还有一部分网站会对Referer进行检测(一些资源网站的防盗链就是检测Referer)。

如果遇到了这类反爬虫机制,可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名。[评论:往往容易被忽略,通过对请求的抓包分析,确定referer,在程序中模拟访问请求头中添加]

对于检测Headers的反爬虫,在爬虫中修改或者添加Headers就能很好的绕过。

0x03 基于用户行为的反爬虫

还有一部分网站是通过检测用户行为,例如同一IP短时间内多次访问同一页面,或者同一账户短时间内多次进行相同操作。[这种防爬,需要有足够多的ip来应对]

大多数网站都是前一种情况,对于这种情况,使用IP代理就可以解决,可以专门写一个爬虫,爬取网上公开的代理ip,检测后全部保存起来,这样的代理ip爬虫经常会用到,最好自己准备一个。

有了大量代理ip后可以每请求几次更换一个ip,这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫。[评论:动态拨号也是一种解决方案]

对于第二种情况,可以在每次请求后随机间隔几秒再进行下一次请求。有些有逻辑漏洞的网站,可以通过请求几次,退出登录,重新登录,继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。[评论:对于账户做防爬限制,一般难以应对,随机几秒请求也往往可能被封,如果能有多个账户,切换使用,效果更佳]

0x04 动态页面的反爬虫

上述的几种情况大多都是出现在静态页面,还有一部分网站,我们需要爬取的数据是通过ajax请求得到,或者通过Java生成的。

首先用Firebug或者HttpFox对网络请求进行分析[评论:感觉google的、IE的网络请求分析使用也挺好]。如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义,我们就能采用上面的方法,直接利用requests或者urllib2模拟ajax请求,对响应的json进行分析得到需要的数据。

能够直接模拟ajax请求获取数据固然是极好的,但是有些网站把ajax请求的所有参数全部加密了。我们根本没办法构造自己所需要的数据的请求。

我这几天爬的那个网站就是这样,除了加密ajax参数,它还把一些基本的功能都封装了,全部都是在调用自己的接口,而接口参数都是加密的。

遇到这样的网站,我们就不能用上面的方法了,我用的是selenium+phantomJS框架,调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本。从填写表单到点击按钮再到滚动页面,全部都可以模拟,不考虑具体的请求和响应过程,只是完完整整的把人浏览页面获取数据的过程模拟一遍。[评论:支持phantomJS]

用这套框架几乎能绕过大多数的反爬虫,因为它不是在伪装成浏览器来获取数据(上述的通过添加 Headers一定程度上就是为了伪装成浏览器),它本身就是浏览器,phantomJS就是一个没有界面的浏览器,只是操控这个浏览器的不是人。

利用 selenium+phantomJS能干很多事情,例如识别点触式(12306)或者滑动式的验证码,对页面表单进行暴力破解等等。它在自动化渗透中还 会大展身手,以后还会提到这个。(正文:知乎bsdr 评论:红黑联盟 )

0x05 场景化的反爬虫解决方案

岂安科技专注于为互联网企业提供业务风控解决方案,反爬虫只是众多需要解决方案其中很小的一部分。不过,因为爬虫是所有攻击链中的重要构成,无论是采集竞争对手网站的数据,尝试破解用户口令还是自动下单,其实都离不开爬虫。

面对互联网的复杂性和特殊性,常规的安全体系及市场规范难以满足威胁判断和风险控制的需求。作为一个技术驱动型的公司,岂安科技帮助企业解决互联网领域的业务风险,主要是通过场景的模式,包括真假用户识别,账号欺诈/盗用、业务欺诈、业务风险控制、交易欺诈监控、恶意订单、补贴滥用、盗卡盗刷等,这些场景中,都无可避免的首要面对——爬虫。

1、降频防御

在爬虫防范过程中,早期由于其展现出的特征很多防御思路都是在于其频率,实际在实际案例中,我们发现现在多代理降低单个IP的频率已经是一种常规的做法,成本也非常的低,目前比较有效的分析维度为:

访问者的URL访问丰富程度:普通用户在打开网页时会有比较丰富的地址访问,而自动爬虫通常只有少数固定的页面访问。

访问者是否具有连贯的访问轨迹:用户在进行页面访问时,通常是有一个合理的访问轨迹,如从页面A跳转到页面B,但爬虫在自动获取数据时,往往是对页面地址进行逐个访问,没有连贯的轨迹。

访问者是否查看了页面上的静态资源:爬虫获取数据时往往只关心具体的文字内容和数据,但不会查看图片以及加载页面上的CSS或者JS信息,这就给出了一个较为显著的判断特征。

访问者每次访问之间的时间间隔:爬虫在获取页面信息时,会出现连续两个Click之间时间非常短的情况,而人手动点击页面不会出现如此短时间或固定的时间访问模式。


2、短信轰炸

短信轰炸是一种特别专项的爬虫,往往只请求短信发送的接口。岂安的解决方案在这项问题上的优势——能够快速采集短信发送的日志,同时可以根据短信发送时IP访问的上下文来综合判断( 岂安特点:不用担心时间序问题)。

如果在发送短信的时候没有其他页面的访问,没有静态资源的访问,最近只请求了这一个接口,便可以直接封禁,不存在误封。


3、注册用户扫描

注册用户的扫描问题的防范与解决方案,其实在本质上也与爬虫问题相似,不同的是,岂安可以增加许多业务方向的维度。

岂安的产品可以在不需要研发资源介入的情况下快速从网络流量中采集注册验证行为,结合IP访问上下文行为进行判断。

一般的防御思路仅是通过限制某个IP的访问频率(如10秒内超过1000次)方式来进行判断的,而在岂安的产品中,2~3次的异常访问即可被确认。


4、评论爬取防御

评论在订单转化上具有非常重要的作用。当用户在浏览网站上的商品时,如果商品没有对应的评论记录或者购买记录,则会产生不信任很难转化到实际下单。

一些商家为了转化率与销售业绩,会想到依靠爬虫爬取其它拥有真正用户参与的商品评论内容。

这会带来什么样的问题呢?

**- 购买信任感被复制、弱化

  • 网站的SEO和搜索引擎权重降低
  • 运营数据失真、策略被破坏
  • 潜在用户流失**

岂安所采用的防御思路与网站爬虫防御思路相同,但与此同时,岂安还会发现爬取评论的脚本请求类型会集中为GET请求,这在用户浏览过程中也是极少见的情况,由此延伸出的垃圾注册、恶意用户、刷单、恶意占库存等相关的各类不良信息都将被检测出,并做出相应的防御、解决措施。


5、其它

点击进入岂安的世界