如何学爬行 爬虫怎么学( 二 )


门朝大海,三河合水万年流 。
暗号只有帮派成员才知道,且不可外泄 。甲、乙双方见面时由「帮派成员-甲」说出「地镇高岗,一派溪山千古秀」,「帮派成员-乙」听到后必须接下一句「门朝大海,三河合水万年流」 。如果「帮派成员-乙」不知道下一句是什么,或者胡说一气,那么「帮派成员-甲」就可以判定他不是接头人,而是冒充的 。
同样的,「帮派成员-乙」要听到帮派成员-甲说出「地镇高岗,一派溪山千古秀」 。否则「帮派成员-甲」就是冒充的,很有可能会将假的密函交给青木堂韦小宝 。
天地会接头人互相传递消息(密函)很像是我们在开发 WEB 应用时的 Client 和 Server,抽象地看起来像这样:
那么问题来了,Client 和 Server 之间需不需要天地会这样的暗号呢?
答案是需要!
Client 就像「帮派成员-甲」,Server 就像「帮派成员-乙」,而他们的密函很有可能会被其他「帮派成员-丁」拿走或伪造 。既然天地会有接头暗号,那么 Client 和 Server 之间用什么来保障传递消息是第一手发出,而不是被拦截伪造的呢?
没错,签名验证!
签名验证是目前 IT 技术领域应用广泛的 API 接口数据保护方式之一,它能够有效防止消息接收端将被篡改或伪造的消息当作正常消息处理 。
要注意的是,它的作用是防止消息接收端将被篡改或伪造的消息当作正常消息处理,而不是防止消息接受端接收假消息,事实上接口在收到消息的那一刻无法判断消息的真假 。这一点非常重要,千万不要混淆了 。
假设 Client 要将「下个月 5 号刺杀鳌拜」这封重要密函交给 Server,抽象图如下:
这时候如果发生冒充事件,会带来什么影响:
其他「帮派成员-丁」从 Client 那里获得消息后进行了伪造,将刺杀鳌拜的时间从 5 号改为 6号,导致 Server 收到的刺杀时间是 6 号 。这么一来,里应外合刺杀鳌拜的事就会变成一方延迟动手,这次谋划已久的刺杀行动大概率会失败,而且会造成不小的损失 。
我们使用签名验证来改善这个消息传递和验证的事 。这里可以简单将签名验证理解为在原消息的基础上进行一定规则的运算和加密,最终将加密结果放到消息中一并发送,消息接收者拿到消息后按照相同的规则进行运算和加密,将自己运算得到的加密值和传递过来的加密值进行比对,如果两值相同则代表消息没有被拦截伪造,反之可以判定消息被拦截伪造 。
签名验证被广泛应用,例如下载操作系统镜像文件时官方网站会提供文件的 MD5 值、阿里巴巴/腾讯/华为等企业对外开放的接口中鉴权部分的 sign 值等 。
以上反爬方法选自《Python3 反爬虫原理与绕过实战》
《Python 3 反爬虫原理与绕过实战》 韦世东 著
这本书是爬虫领域第一本专门介绍反爬虫的书,被誉为爬虫工程师不可错过的“武功秘籍”,腾讯、马蜂窝工程师倾力推荐 。
知其然,知其所以然,文武兼备,本书从攻防两个角度进行解读,描述了爬虫技术与反爬虫技术的对抗过程,并详细介绍了这其中的原理和具体实现方法 。
从本书中你将了解到以上文中提到的签名验证以及文本混淆、动态渲染、加密解密、代码混淆和行为验证码等反爬虫技术的成因和绕过方法 。
爬虫技术是一把双刃剑,希望大家可以将学到的技术用于防护,提高应用防护等级,以剑养剑,攻守兼备才能够在技术的江湖上任逍遥~
写在最后
爬虫本身并未违反法律 。但程序运行过程中可能对他人经营网站造成破坏,爬取的数据有可能涉及隐私或机密,数据本身也可能产生法律纠纷 。


特别声明:本站内容均来自网友提供或互联网,仅供参考,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。