大家好,我是志斌~

今天来给大家介绍一下信息校验型反爬虫中的另外一种反爬虫—签名验证反爬虫。签名验证是防止服务器被恶意链接和篡改数据的有效方式之一,也是目前后端API最常用的防护方式之一。

一、定义

签名是一个根据数据源进行计算或者加密的过程,用户经过签名后会一个具有一致性和唯一性的字符串,它就是你访问服务器的身份象征。由它的一致性和唯一性这两种特性,从而可以有效的避免服务器端,将伪造的数据或被篡改的数据当初正常数据处理。

用于签名验证的信息通常被放在请求正文中发送到服务器端。如下图所示:

android绕过签名校验 绕过签名验证_android绕过签名校验

二、原理

签名验证反爬虫有多种实现方式,但是它的实现原理都是相同的,都是由客户端生成一些,随机值和不可逆的MD5加密字符串,在发起请求的同时,将这些值一同发送到服务器端。然后服务器端使用相同的方式对随机值进行计算和MD5加密,如果服务器端得到的MD5值与前端提交的MD5值相等,就代表是正常的请求,否则报错。部分代码如下:

import hashlib

def Hex5(value):
   # 使用 MD5 加密值并返回加密后的字符串

   manipulator = hashlib.md5()
   manipulator.update(value.encode('utf-8'))
   return manipulator.hexdigest()

def Comparison(, actions, tim, randstr, sign):
   # 根据 MD5 加密值,并与客户端提交的 MD5 值进行比对

   value = actions + tim + randstr
   hexs = Hex5(value)
   if sign == hexs:
       returnTrue
   returnFalse

三、绕过

现在签名验证反爬虫已经被广泛应用于Web领域,当我们在发起请求时,发现正文中含有一些随机的字符串时,我们就要考虑目标网站可能采用了签名验证反爬虫。

大部分签名验证反爬虫的正文信息,都是由JavaScript进行计算的,我们在遇到它时,去JS页面中寻找相应的JS文件,从而发现它的加密方式,进而来绕过它。

四、小结

  • 签名验证是一种较为高级的反爬虫方式,主要是通过JavaScript来生成随机字符串、多字段组合等方式来对请求进行加密。
  • 个人感觉它是Ajax异步加载的更高级形式。绕过它不仅要在XHR中寻找请求信息,也要在JS中寻找加密的方式。
  • 目前这种反爬虫方法已经被各类大型网站所应用,所以大家要掌握这种反爬虫的绕过方法。
  • 本文旨在学习与研究签名验证反爬虫,请大家不要用于非法用途。