东哥《反爬虫原理与绕过实战》笔记(待续)

1,008 阅读3分钟

信息校验行反爬虫

User-Agent 反爬虫(初级)

  • 服务器通过校验请求头中的User-Agent值来区分正常用户和爬虫程序的手段

  • 服务器可以使用黑名单结合条件判断实现针对性较强的反爬虫,常见于User-Agent、Host、Referer.

Cookie反爬虫(广泛应用)

  • 服务器端通过校验请求头中的Cookie值来区分正常用户和爬虫程序的手段

  • Cookie不仅可以用于Web服务器的用户信息存储或状态保持,还可以用于反爬虫。

Cookie 与JavaScript结合(常见)

  • 通过JavaScript生成可变的Cookie,服务器储存生成规则,验证Cookie,

  • arr.join("") 来生成Cookie值,通常加入时间戳,当服务器验证时间戳差值大于设置值时,认定Cookie是伪造的。

用户过滤

  • 区分用户是否登录,是否为VIP,用户等级是否达到规定等级。

  • 从网站运营的角度来看,有利于用户增长。

  • 服务器根据Cookie值或者用户数据来判断用户身份,从而决定正常跳转还是重定向。

User-Agent和Cookie都是请求头的默认头部,在值的设定方面有一定的局限性,但与JavaScript结合后,就变得很灵活。

签名验证反爬虫

  • 签名是根据数据源进行计算或加密的过程,签名的结果是一个具有唯一性和一致性的字符串。

  • 是防止恶意连接和数据被篡改的有效方式之一,也是目前后端API最常用的防护方式之一。

  • 原理:由客户端生成一些随机值和不可逆的MD5加密字符串,并在发起请求时将这些值发送给服务器,服务器使用相同的方式对随机值进行计算以及MD5加密,如果服务器端得到的MD5值与前端提交的MD5值相同则200否则就403.

时间戳可以有效地避免请求正文被服用,组合字符串的消息摘要值则用于避免服务器端处理被篡改过的数据。 当发现请求正文中包含信息摘要值(特征是32位随机字符串)时,我们可以大胆猜测目标网站使用了签名验证反爬虫。大部分签名验证反爬虫的请求,正文信息计算是使用JavaScript进行的,可以用过浏览器的全局搜索(shift + alt +F)来快速定位生成的代码片段。

WebSocket 握手验证反爬虫(暂未理解)

  • WebSocket 握手使用Http协议,上面的反爬虫方法均适用于WebSocket协议。

  • 用于服务端主动给客户端推送消息的效果【p.s:伪实现使用轮询或长轮询,每隔一段去服务器请求数据;真实现:WebSocket】

  • AioWebSocket库 pip install aiowebsocket

    • 首先,aiowebsocket 根据 WebSocket 地址,向指定的服务端发送握手请求,并校验握手结果。

    • 然后,在确认握手成功后,将数据发送给服务端。

    • 整个过程中为了保持连接不断开,aiowebsocket 会自动与服务端响应 ping pong。

    • 最后,aiowebsocket 读取服务端推送的消息。

信息校验主要解决客户端身份鉴别、数据来源判断和请求的合法性判断等问题,避免数据接收者使用被篡改的数据,保证数据的有效性。

动态渲染反爬虫(天然的反爬虫手段)

由JavaScript 改变HTML DOM导致页面内容变化的现象称为动态渲染。