爬虫中Cookie的伪造(非登录)-反爬与反反爬的奇技淫巧

两篇文章下肚,各位看官感觉如何。避免新同学不知道之前的文章:

爬虫被封IP了怎么办-反爬与反反爬的奇技淫巧

爬虫中的验证码识别-反爬与反反爬的奇技淫巧

前两篇文章算是讲了最常规的两种反爬,本篇文章理论上应该说说登录,因为基本上这三个反爬套路结束之后,其他都是小众了。不过登录这个东西真的没太多可讲的,因为严格来说登录并不是反爬,只是一种保护手段,后面有时间简单说说吧。

今天咱们要聊的这位主角跟登录倒也有点关系。先来简单摘抄一段Cookie的描述:

Cookie,有时也用其复数形式Cookies,指某些网站为了辨别用户身份、进行 session 跟踪而储存在用户本地终端上的数据(通常经过加密)。定义于 RFC2109 和 2965 中的都已废弃,最新取代的规范是 RFC6265

那简单来说Cookie就是一个浏览器上的缓存或者叫小数据库也行,在没有LocalStorage之前,我们前端工程师就只能用这破玩意当数据库使。

那现在问题来了,这玩意对反爬到底有什么帮助呢。

好了,我的经典套路又要来了,先假装介绍反爬技巧:

一.为什么Cookie能够做反爬?

这个问题远比前两篇文章里的要难回答,因为IP和验证码都是实打实的原因导致人家是反爬的上上手。但是Cookie则不然,Cookie上的反爬则更多的是纯粹人与人之间的对抗,Cookie由于是存储在客户端上导致其伪造成本极低,那为什么还有那么多的网页采用Cookie来做反爬呢?(当然很多爬虫菜鸟工程师可能都判断不出来是用Cookie在做反爬),是因为目前Javascript混淆的手段也是花样百出,任你是Javascript的高手高手高高手,我也能用恶心的招数(比如把所有代码拆成ASCII码数组,再动态拼合后eval)来怼得你不想吃饭。这也成就了Cookie反爬成为除IP和验证码这两类可见的反爬手段之后最重要的一种补充。当然具体Javascript对抗相关的内容我们下一篇文章再讲。

二.怎么做好Cookie反爬?

首先咱们得知道,常见的Cookie设置方式有两种,一种在后端设置,通过Response的Header传输到前端浏览器中,如下图:

另一种则更加隐蔽,通过前端调用document.cookie来设置,对于反爬效果来说,第二种显然比第一种效果来的好的多,起码能让反反爬工程师少陪老婆一个星期,是不是想起来都觉得很过瘾呢。当然直接调用document.cookie来设置基本是没什么效果的,一定要配合上Javascript的混淆才能熬出一锅反爬的好汤来。至于怎么混淆,我们也留到下一篇文章再讲。

三.写爬虫时发现Cookie很复杂该怎么分析?

我们公司有专门做爬虫的同事一见到复杂的Cookie就想哭,Cookie确实属于反反爬中相当难缠的对手,应该说跟Request中有一个摸不着头脑的参数值可以并驾齐驱。那我们遇到这种Cookie应该如何沉着应对呢?下面我就给大家把解题思路讲一讲,考试必考啊。

首先一定准备好Chrome,老师其他工具用的少,就不展开了。

1. 先删掉Cookie看正不正常的

第一步也是最重要的一步,千万记得先把Cookie都删掉请求一次,如果没问题,万事大吉。这里注意对于Cookie来说一定要把环境处理好,因此测试之前一定记得点开『打开新的隐身窗口』的选项。每次测试完了,打开控制界面,清空Cookie再做下一次测试。

2. 再找Response中的Cookie

如果不行,咱们就开始找这些Cookie是怎么来的,首先不少的Cookie都是Http Reponse里返回的,那么清理掉Cookie,刷新页面,点开network的标签页,一个一个请求点下去,很快就会发现是哪个请求返回的,具体如下图所示:

根据我们多年做爬虫的经验,先访问一下首页拿Response的Cookie是一个成功率很高的反反爬途径。

3. 找Javascript的关键字

如果还没找到,咱们就进行下一步:找到Cookie中比较特别的词(至于什么是特别的词,需要大家用正常人的智商去判断)。用这个词去主要的Javascript文件中搜索。一般来说会找到文件中具体是哪一句设置的,如果这个逻辑看着很复杂,可以在这一句打断点调试来判断这个Cookie到底如何生成的。

4. 终极方案Break-on-Access

还是找不到的话,那证明开发这个网站的工程师是一个反爬的好手,那我们只能祭上我们的终极杀器:Chrome Snippets-paulirish/break-on-access

关于这个Chrome Snippets怎么使用,大家直接参考这个这个Github的链接,解释的挺清楚。有了这个工具,我们调用一下:

breakOn(document, 'cookie');

就可以在任何语句修改Cookie的时候,进入断点。再通过单点调试,逐步揭开反爬工程师险恶的面纱了。

至于如何单点调试,老师就不去做痛苦的回忆了,同学们自己去体会把。

——————————————最后再说两句————————————————

其实Cookie只是整个Javascript反爬中的一部分,至于为什么单独写一篇,确实是Cookie的反爬也有一定自己的特点,跟纯粹的Javascript反爬有一些区别,另外LocalStorage也有一些使用技巧,如百度统计会在可以存LocalStorage的时候,存储信息来判断是不是老用户等等。不过因为大多人不在反爬中使用,所以我们就不展开聊了。

下一篇我们就要进入可能整个系列最重要一篇文章-Javascript反爬加密与逆向破解,如果前三篇只是介绍兵器,那么下一篇则是真正的内功心法了。

分享至微信朋友圈 ×
打开微信,点击底部的“发现”,
使用“扫一扫”即可将网页分享至朋友圈。