如何设计一款地震高岗一派溪山千古秀的反爬虫?

2024-04-27 07:08

本文主要是介绍如何设计一款地震高岗一派溪山千古秀的反爬虫?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

天地会 青木堂

地震高岗,一派溪山千古秀

门朝大海,三河合水万年流

没错,这正是《鹿鼎记》天地会的接头暗号。

天地会为什么需要接头暗号呢?

假设天地会赤火堂香主派人从京城前扬州将一封非常重要的密函交给青木堂香主韦小宝,我们可以将这件事抽象为下图:

这件事的核心是帮派成员-甲将重要密函交给帮派成员-乙。假设甲、乙双方互不相识亦从未有过会面,那帮派成员-甲如何判断密函交给了帮派成员-乙,而不是给错人——给了其他帮派成员-丁呢?

在历史实践中肯定吃过这样的亏,遂天地会采用了接头暗号这种方式来确保甲、乙双方是同一帮派成员,这才有了:

地震高岗,一派溪山千古秀;

门朝大海,三河合水万年流;

暗号只有帮派成员才知道,且不可外泄。甲、乙双方见面时由帮派成员-甲说出地震高岗,一派溪山千古秀,帮派成员-乙听到后必须接下一句门朝大海,三河合水万年流。如果帮派成员-乙不知道下一句是什么,或者胡说一气,那么帮派成员-甲就可以判定他不是接头人,而是冒充的。

同样的,帮派成员-乙要听到帮派成员-甲说出地震高岗,一派溪山千古秀。否则帮派成员-甲就是冒充的,很有可能会将假的密函交给青木堂韦小宝。

天地会接头人互相传递消息(密函)很像是我们在开发 WEB 应用时的 Client 和 Server,抽象地看起来像这样:

那么问题来了,Client 和 Server 之间需不需要天地会这样的暗号呢

答案是需要

Client 就像帮派成员-甲,Server 就像帮派成员-乙,而他们的密函很有可能会被其他帮派成员-丁拿走或伪造。既然天地会有接头暗号,那么 Client 和 Server 之间用什么来保障传递消息是第一手发出,而不是被拦截伪造的呢?

没错,签名验证

签名验证是目前 IT 技术领域应用广泛的 API 接口数据保护方式之一,它能够有效防止消息接收端将被篡改或伪造的消息当作正常消息处理。

⚠️要注意的是,它的作用防止消息接收端将被篡改或伪造的消息当作正常消息处理,而不是防止消息接受端接收假消息,事实上接口在收到消息的那一刻无法判断消息的真假。这一点非常重要,千万不要混淆了。

假设 Client 要将下个月 5 号刺杀鳌拜这封重要密函交给 Server,抽象图如下:

这时候如果发生冒充事件,会带来什么影响:

其他帮派成员-丁从 Client 那里获得消息后进行了伪造,将刺杀鳌拜的时间从 5 号改为 6号,导致 Server 收到的刺杀时间是 6 号。这么一来,里应外合刺杀鳌拜的事就会变成一方延迟动手,这次谋划已久的刺杀行动大概率会失败,而且会造成不小的损失。

我们使用签名验证来改善这个消息传递和验证的事,这里可以简单将签名验证理解为在原消息的基础上进行一定规则的运算和加密,最终将加密结果放到消息中一并发送,消息接收者拿到消息后按照相同的规则进行运算和加密,将自己运算得到的加密值和传递过来的加密值进行比对,如果两值相同则代表消息没有被拦截伪造,反之可以判定消息被拦截伪造。

这里我们通过实际网站中的例子来加深理解,打开 http://www.porters.vip/verify/sign/ ,网页如下图所示:

鼠标点击图片中黄色的按钮——点击查看详情,此时网页内容产生变化,页面如下图所示:

为了观察和分析,我们唤起浏览器内置的开发者工具(快捷键 F12 或 Command+Option+I)并切换到 Network 面板。此时刷新页面,并再一次点击黄色按钮。点击后我们会在 Network 面板中看到很多网络请求记录,其中有一条 Name 很长的请求,点击它。

点击它后 Network 面板将会分为左右两栏,左侧依旧是请求记录,右侧是我们选中的请求记录的请求详情。我们选中的这条网络请求信息如下图所示:

从 General 和 Query String Parameters 中我们得知本次向 http://www.porters.vip/verify/sign/fet 接口发出的请求中携带了 actions、tim、randstr 和 sign 等 4 个参数。这里的 sign 字段和对应的值就是签名验证中的签名,即经过一定规则运算和加密的值

如果没有 sign,Client 只将 actions、tim 和 randstr 发送给 Server,那么帮派成员-丁可以很轻松地伪造一条消息发送给 Server,例如:

Server 收到后就当作正常的消息处理,根本无从判断消息是谁发的,有没有被拦截、篡改。那么问题来了:sign 在这里发挥了什么作用呢?

假设 sign 的运算规则为:

sign = MD5(str(actions + 10086) + str(tim) + randstr * 3)

Client 中设定的这个运算规则相当于接头暗号中的上半句地震高岗,一派溪山千古秀,而 Server 端拿到 actions、tim、randstr 和 sign 之后,用相同的运算规则计算 new_sign 的值,最后判断 Client 发送的 sign 和 Server 自己计算的 new_sign 是否一致,看起来像这样:

new_sign = MD5(str(actions + 10086) + str(tim) + randstr * 3)
if new_sign == sign:print("不是假消息")
else:print("这是假消息")

当然,这里的交互只是单向的,Server 端不必将门朝大海,三河合水万年流回复给 Client(其实可以这么做,但在网络通信中没有必要)。就算其他帮派成员-丁拦截到消息,并进行了篡改也不会对 Server 造成影响,因为其他帮派成员-丁并不知道 sign 是如何运算的,他篡改后的的数据计算出的 new_sign 和收到的 sign 是不同的,因此 Server 能够区分真假消息并丢弃假消息。

有了接头暗号后,消息接收方 Server 就不用担心拿到的是假密函了。

签名验证被广泛应用,例如下载操作系统镜像文件时官方网站会提供文件的 MD5 值、阿里巴巴/腾讯/华为等企业对外开放的接口中鉴权部分的 sign 值等。

本文改编自《Python3 反爬虫原理与绕过实战》第 4 章第 3 小节,这本书是爬虫领域第一本专门介绍反爬虫的书,从“攻”与“防”两个角度描述了爬虫技术与反爬虫技术的对抗过程,并详细介绍了这其中的原理和具体实现方法。通过这本书,你将了解到签名验证、文本混淆、动态渲染、加密解密、代码混淆和行为验证码等反爬虫技术的成因和绕过方法。书本中介绍到的反爬虫知识覆盖了市面上 90% 以上的反爬虫手段知识点,非常硬核。

掌握这些知识后,你的理论基础将非常扎实,能够轻松应对一线大厂中高级爬虫工程师面试的理论和思路问题。实战方面,除了本书搭建的 21 个在线练习示例之外,还需要结合工作中遇到的综合反爬虫进行演练,从而稳步提升个人技术实力。

⏰ 本文使用的示例网站 http://www.porters.vip/verify/sign/ 正是书中 21 个在线练习示例其中的一个。

☟ 一键下单

这篇关于如何设计一款地震高岗一派溪山千古秀的反爬虫?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/939828

相关文章

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

怎么让1台电脑共享给7人同时流畅设计

在当今的创意设计与数字内容生产领域,图形工作站以其强大的计算能力、专业的图形处理能力和稳定的系统性能,成为了众多设计师、动画师、视频编辑师等创意工作者的必备工具。 设计团队面临资源有限,比如只有一台高性能电脑时,如何高效地让七人同时流畅地进行设计工作,便成为了一个亟待解决的问题。 一、硬件升级与配置 1.高性能处理器(CPU):选择多核、高线程的处理器,例如Intel的至强系列或AMD的Ry

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订阅👇🏻 单片机

Python3 BeautifulSoup爬虫 POJ自动提交

POJ 提交代码采用Base64加密方式 import http.cookiejarimport loggingimport urllib.parseimport urllib.requestimport base64from bs4 import BeautifulSoupfrom submitcode import SubmitCodeclass SubmitPoj():de

SprinBoot+Vue网络商城海鲜市场的设计与实现

目录 1 项目介绍2 项目截图3 核心代码3.1 Controller3.2 Service3.3 Dao3.4 application.yml3.5 SpringbootApplication3.5 Vue 4 数据库表设计5 文档参考6 计算机毕设选题推荐7 源码获取 1 项目介绍 博主个人介绍:CSDN认证博客专家,CSDN平台Java领域优质创作者,全网30w+

单片机毕业设计基于单片机的智能门禁系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W+,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设计 主要对象是咱们电子相关专业的大学生,希望您们都共创辉煌!✌💗 👇🏻 精彩专栏 推荐订

Python:豆瓣电影商业数据分析-爬取全数据【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】

**爬取豆瓣电影信息,分析近年电影行业的发展情况** 本文是完整的数据分析展现,代码有完整版,包含豆瓣电影爬取的具体方式【附带爬虫豆瓣,数据处理过程,数据分析,可视化,以及完整PPT报告】   最近MBA在学习《商业数据分析》,大实训作业给了数据要进行数据分析,所以先拿豆瓣电影练练手,网络上爬取豆瓣电影TOP250较多,但对于豆瓣电影全数据的爬取教程很少,所以我自己做一版。 目

Spring的设计⽬标——《Spring技术内幕》

读《Spring技术内幕》第二版,计文柯著。 如果我们要简要地描述Spring的设计⽬标,可以这么说,Spring为开发者提供的是⼀个⼀站式的轻量级应⽤开发框架(平台)。 作为平台,Spring抽象了我们在 许多应⽤开发中遇到的共性问题;同时,作为⼀个轻量级的应⽤开发框架,Spring和传统的J2EE开发相⽐,有其⾃⾝的特点。 通过这些⾃⾝的特点,Spring充分体现了它的设计理念:在

开题报告中的研究方法设计:AI能帮你做什么?

AIPaperGPT,论文写作神器~ https://www.aipapergpt.com/ 大家都准备开题报告了吗?研究方法部分是不是已经让你头疼到抓狂? 别急,这可是大多数人都会遇到的难题!尤其是研究方法设计这一块,选定性还是定量,怎么搞才能符合老师的要求? 每次到这儿,头脑一片空白。 好消息是,现在AI工具火得一塌糊涂,比如ChatGPT,居然能帮你在研究方法这块儿上出点主意。是不

创业者该如何设计公司的股权架构

本文来自七八点联合IT橘子和车库咖啡的一系列关于设计公司股权结构的讲座。 主讲人何德文: 在公司发展的不同阶段,创业者都会面临公司股权架构设计问题: 1.合伙人合伙创业第一天,就会面临股权架构设计问题(合伙人股权设计); 2.公司早期要引入天使资金,会面临股权架构设计问题(天使融资); 3.公司有三五十号人,要激励中层管理与重要技术人员和公司长期走下去,会面临股权架构设计问题(员工股权激