赞
踩
大家好,我是志斌~
今天来给大家介绍一下信息校验型反爬虫中的另外一种反爬虫—签名验证反爬虫。签名验证是防止服务器被恶意链接和篡改数据的有效方式之一,也是目前后端API最常用的防护方式之一。
签名是一个根据数据源进行计算或者加密的过程,用户经过签名后会一个具有一致性和唯一性的字符串,它就是你访问服务器的身份象征。由它的一致性和唯一性这两种特性,从而可以有效的避免服务器端,将伪造的数据或被篡改的数据当初正常数据处理。
用于签名验证的信息通常被放在请求正文中发送到服务器端。如下图所示:
签名验证反爬虫有多种实现方式,但是它的实现原理都是相同的,都是由客户端生成一些,随机值和不可逆的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中寻找加密的方式。
目前这种反爬虫方法已经被各类大型网站所应用,所以大家要掌握这种反爬虫的绕过方法。
本文旨在学习与研究签名验证反爬虫,请大家不要用于非法用途。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。