news 2026/5/21 13:19:45

从网站防御视角看反反爬:底层逻辑拆解与实战优化指南

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
从网站防御视角看反反爬:底层逻辑拆解与实战优化指南


写爬虫写了这么多年,最大的感受就是现在写个爬虫比写业务代码还难。以前改个User-Agent就能跑通的时代一去不复返了,现在随便一个稍微有点流量的网站,都给你整上全套反爬:JS加密、指纹检测、行为分析、滑块验证、IP封禁…一套组合拳下来,能把你整得怀疑人生。

很多人遇到反爬第一反应就是去搜"某某网站怎么爬",然后抄一堆别人的代码,改改参数就跑。结果没过两天网站一更新,代码又挂了。然后又开始新一轮的搜素、复制、粘贴…陷入无限循环。

其实问题的根源在于,大多数人都是站在爬虫开发者的角度去思考反反爬,而没有真正站在网站防御者的角度去理解他们为什么要这么做,他们的底层逻辑是什么。如果你能搞懂网站防御的思路,你就会发现,很多反爬措施其实都是纸老虎,反反爬也不是什么玄学。

网站防御的三层核心架构

先给大家看一张我画的网站反爬防御体系架构图,这是我这么多年和各种反爬斗智斗勇总结出来的,基本上所有网站的反爬都是围绕这三层来做的。

用户请求

接入层防御

是否拦截?

返回错误页面/验证码

应用层防御

是否异常?

触发风控策略

业务层防御

是否违规?

账号封禁/数据脱敏

返回正常数据

IP黑白名单

请求频率限制

基础协议校验

设备指纹检测

JS环境检测

请求签名验证

行为轨迹分析

账号权限控制

数据访问限制

内容混淆加密

看懂这张图,你就看懂了90%的反爬。所有的反爬措施,本质上都是在这三层中的某一层或者某几层做文章。反反爬的核心,就是找到每一层防御的薄弱点,然后针对性地突破。

很多人觉得反爬很复杂,是因为他们把所有的反爬措施都混在一起看了。其实只要你把它们拆解到这三层里,就会发现每一层的防御逻辑都很清晰,对应的突破方法也很明确。

接入层防御:最基础也是最容易被误解的一层

接入层是网站防御的第一道大门,也是大多数爬虫最先遇到的反爬。很多人一上来就被IP封禁搞怕了,觉得这是最难搞的反爬。但实际上,接入层防御是所有防御中成本最低、效果最差、也是最容易突破的一层。

接入层防御的核心逻辑非常简单:通过请求的网络特征来区分正常用户和爬虫。它能看到的只有你的IP地址、请求频率、请求头信息这些最基础的东西。它根本不知道你是用浏览器访问的,还是用Python写的脚本访问的。

所以接入层的所有反爬措施,本质上都是基于一个假设:正常用户的请求频率不会太高,请求头是标准的浏览器请求头,同一个IP不会在短时间内发起大量请求

这个假设在十年前可能还成立,但在今天,这个假设已经千疮百孔了。

先说说IP封禁。很多网站会封禁短时间内请求量过大的IP。于是很多人就去买代理IP,什么短效代理、长效代理、隧道代理…各种代理买了一大堆,结果发现还是被封。为什么?因为你用的代理IP,别人也在用。那些公开的免费代理IP,早就被无数爬虫爬烂了,网站的IP黑名单里早就有了。

其实IP封禁的底层逻辑是基于IP的请求频率阈值。只要你的IP在单位时间内的请求量超过了这个阈值,就会被封禁。这个阈值不是固定的,不同的网站、不同的时间段、不同的页面,阈值都不一样。

所以突破IP封禁最有效的方法,不是买更多的代理IP,而是精准控制请求频率。我见过很多人写爬虫,一上来就开100个线程疯狂请求,结果不到一分钟IP就被封了。然后就开始骂网站反爬太严,其实这根本不是反爬严,是你自己太蠢了。

正常用户浏览一个页面,至少需要几秒钟的时间。你一秒钟请求十几个页面,傻子都知道你是爬虫。所以把请求频率控制在合理范围内,比你买100个代理IP都管用。

再说说请求头校验。很多人写爬虫,只会改个User-Agent,然后就觉得万事大吉了。结果一跑就被封。然后就开始纳闷:我明明改了User-Agent啊,为什么还能检测到我是爬虫?

因为请求头里不只有User-Agent。还有Accept、Accept-Language、Accept-Encoding、Referer、Cookie等等一大堆字段。这些字段的顺序、值的格式,不同的浏览器都是不一样的。

举个最简单的例子:Chrome浏览器的Accept字段是text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9,而Python requests库默认的Accept字段是*/*

你觉得网站的反爬系统会分不清这两个的区别吗?

更狠一点的网站,还会校验请求头字段的顺序。比如Chrome浏览器的请求头字段顺序是Host、Connection、Cache-Control、Upgrade-Insecure-Requests、User-Agent、Accept、Accept-Encoding、Accept-Language、Cookie,而requests库默认的请求头字段顺序是User-Agent、Accept-Encoding、Accept、Connection、Host、Cookie。

只要顺序不对,直接判定为爬虫。

所以突破请求头校验的正确方法,不是只改User-Agent,而是完整复制浏览器的所有请求头,包括字段顺序。最简单的方法就是在浏览器的开发者工具里,把请求头直接复制下来,然后原封不动地用到你的爬虫里。

应用层防御:真正的战场,也是反爬技术的核心

如果说接入层防御只是开胃菜,那么应用层防御就是真正的主菜了。现在绝大多数网站的反爬核心,都在应用层。这也是反爬技术发展最快、最卷的地方。

应用层防御的核心逻辑是:通过客户端的环境特征和行为特征来区分正常用户和爬虫。它不再只看你的请求是什么样的,而是看你是谁,你在做什么。

这就是为什么很多人用了代理,改了请求头,还是被检测到的原因。因为你的客户端环境和行为特征,已经暴露了你是爬虫的身份。

应用层防御主要分为四个部分:设备指纹检测、JS环境检测、请求签名验证、行为轨迹分析。我们一个一个来说。

设备指纹检测:给你的电脑发一张"身份证"

设备指纹是现在最主流、也是最有效的反爬技术之一。它的原理是通过收集你浏览器和设备的各种特征信息,生成一个唯一的标识符,也就是设备指纹。

这些特征信息包括但不限于:

  • 浏览器的User-Agent、语言、时区
  • 屏幕分辨率、颜色深度
  • 系统字体列表
  • 插件列表
  • Canvas指纹
  • WebGL指纹
  • AudioContext指纹
  • WebRTC指纹
  • 硬件加速信息
  • 电池信息
  • 传感器信息

把这些信息组合起来,就可以生成一个几乎唯一的设备指纹。即使你换了IP,清了Cookie,只要你的设备指纹不变,网站还是能认出你。

很多人觉得设备指纹很神秘,其实它的原理非常简单。就是在你的浏览器里运行一段JS代码,收集上面这些信息,然后发送给服务器。服务器根据这些信息计算出一个指纹值,和数据库里的指纹进行比对。

如果你的指纹在数据库里被标记为爬虫,那么不管你怎么换IP,怎么改请求头,都会被拦截。

那么怎么突破设备指纹检测呢?

最笨的方法是模拟所有的指纹信息。但这几乎是不可能的,因为指纹信息太多了,而且每个网站收集的指纹信息都不一样。你永远不知道网站到底收集了哪些信息,用了哪些算法来生成指纹。

最有效的方法是使用真实的浏览器环境。既然设备指纹是基于浏览器环境生成的,那我就用真实的浏览器来跑爬虫,这样生成的指纹就是真实的用户指纹,网站根本无法区分。

这就是为什么现在Selenium、Playwright、Puppeteer这些自动化工具这么流行的原因。它们可以控制真实的浏览器,生成和正常用户完全一样的设备指纹。

当然,网站也不是傻子。它们也在想办法检测这些自动化工具。这就引出了我们下一个话题:JS环境检测。

JS环境检测:识别自动化工具的照妖镜

JS环境检测的核心逻辑是:自动化工具的浏览器环境和真实用户的浏览器环境是有区别的。只要找到这些区别,就能识别出自动化工具。

比如Selenium,它会在浏览器中注入一些特殊的变量和函数。最经典的就是window.navigator.webdriver这个变量。在正常的浏览器中,这个变量的值是undefined,而在Selenium控制的浏览器中,这个变量的值是true

早期的Selenium反爬,只要检测到这个变量为true,就直接判定为爬虫。

后来大家都知道了这个漏洞,就开始在JS中把这个变量改成undefined。于是网站又开始找其他的区别。比如:

  • window.chrome对象的属性
  • document.documentElement.getAttribute('webdriver')
  • navigator.plugins的长度
  • navigator.languages的长度
  • performance.timing的各种时间差
  • 鼠标事件的坐标精度
  • 键盘事件的时间间隔

这些区别非常多,而且一直在更新。今天你改了这个变量,明天网站又会检测另一个变量。这就是为什么很多人觉得Selenium反爬很难搞的原因。

那么怎么突破JS环境检测呢?

最好的方法是使用已经做好了反检测的自动化工具。比如undetected-chromedriver,它专门针对Selenium的各种检测点做了修复,可以绕过绝大多数网站的JS环境检测。

还有Playwright,它本身就比Selenium更难被检测到,因为它是直接和浏览器的CDP协议通信,而不是通过webdriver。而且Playwright也有很多反检测的插件,比如playwright-stealth。

当然,最根本的方法还是自己去分析网站的检测代码。找到网站到底检测了哪些变量和函数,然后针对性地去修改。这需要一定的JS逆向能力,但一旦掌握了,你就再也不怕任何JS环境检测了。

请求签名验证:让你的请求无法被伪造

请求签名验证是现在很多大型网站都在使用的反爬技术。它的原理是:客户端在发送请求之前,会把请求的参数、时间戳、随机数等信息,通过一个加密算法生成一个签名值,然后把这个签名值一起发送给服务器。

服务器收到请求后,会用同样的算法和参数重新计算一遍签名值,然后和客户端发送过来的签名值进行比对。如果不一致,就直接拒绝请求。

这个反爬技术的厉害之处在于,它把反爬的逻辑从服务器端转移到了客户端。只要你不知道客户端的加密算法和密钥,你就无法伪造合法的请求。

这就是为什么很多人抓包抓到了请求参数,但是自己构造请求却总是失败的原因。因为你少了那个签名值,或者你的签名值计算错了。

突破请求签名验证的唯一方法,就是逆向分析客户端的JS代码,找到签名算法,然后用Python或者其他语言重新实现一遍

这听起来很难,但实际上并没有你想象的那么难。大多数网站的签名算法都不是自己写的,而是用的标准的加密算法,比如MD5、SHA1、HMAC、AES等等。只是在标准算法的基础上,做了一些小小的修改。

逆向分析的关键是找到签名算法的入口点。通常可以通过搜索签名参数的名字来找到。比如签名参数叫sign,你就可以在JS代码中搜索sign:或者sign=,很快就能找到签名算法的位置。

找到算法之后,剩下的就是把JS代码翻译成Python代码。这需要一定的JS和Python基础,但只要多练几次,你就会发现其实都是套路。

行为轨迹分析:最难突破的反爬技术

行为轨迹分析是现在最高级、也是最难突破的反爬技术。它的核心逻辑是:正常用户的行为是有规律的,而爬虫的行为是机械的、没有规律的

网站会收集你在页面上的所有行为数据,比如:

  • 鼠标的移动轨迹
  • 点击的位置和时间间隔
  • 滚动页面的速度和距离
  • 键盘输入的速度和间隔
  • 在每个页面停留的时间
  • 页面的访问顺序

然后通过机器学习算法,对这些行为数据进行分析,建立正常用户的行为模型。如果你的行为和正常用户的行为模型偏差太大,就会被判定为爬虫。

比如,正常用户点击一个按钮,鼠标会从当前位置移动到按钮位置,这个移动过程是有轨迹的,而且速度是不均匀的。而爬虫点击按钮,通常是直接点击按钮的坐标,没有移动过程,或者移动过程是匀速的直线。

再比如,正常用户输入一个用户名,会一个字符一个字符地输入,而且每个字符之间的时间间隔是不一样的。而爬虫输入用户名,通常是一次性把整个字符串粘贴进去,或者每个字符之间的时间间隔是固定的。

这些细微的差别,人眼可能看不出来,但机器学习算法一眼就能看出来。

突破行为轨迹分析的方法,就是尽可能地模拟正常用户的行为

比如,模拟鼠标移动的时候,不要用匀速直线运动,而是用贝塞尔曲线来模拟真实的鼠标移动轨迹。模拟点击的时候,在点击之前先移动鼠标到按钮附近,然后再点击。模拟输入的时候,每个字符之间的时间间隔随机化,不要固定。

还有,不要总是按照固定的顺序访问页面,不要总是在固定的时间间隔发送请求。要加入一些随机的等待时间,偶尔返回上一页,偶尔点击一些无关的链接,让你的行为看起来更像一个真实的人。

当然,这只是基础。对于一些非常严格的网站,仅仅模拟这些还不够。你还需要建立自己的行为模型,通过大量的正常用户行为数据,训练出一个和真实用户几乎一样的行为模型。这需要非常深厚的机器学习功底,也是现在反反爬领域的前沿方向。

业务层防御:最后的防线,也是最容易被忽视的一层

很多人觉得突破了应用层防御,就万事大吉了。其实不然。很多网站还有最后一道防线:业务层防御。

业务层防御的核心逻辑是:即使你是一个真实的用户,你也不能做违反业务规则的事情

比如,一个正常用户一天最多只能查看100条商品详情,而你一天查看了1000条,即使你的设备指纹是真实的,你的行为也是正常的,网站还是会限制你的访问。

再比如,一个正常用户只能查看自己的订单信息,而你试图查看别人的订单信息,即使你通过了前面所有的防御,网站还是会拒绝你的请求。

业务层防御通常和账号系统结合在一起。很多网站会根据你的账号等级、注册时间、历史行为等因素,给你分配不同的权限和访问限制。新注册的账号,限制会比较多;老账号,限制会比较少。

所以突破业务层防御的方法,就是养号。通过模拟正常用户的行为,把你的账号养成熟,提高账号的权重。这样即使你访问的频率稍微高一点,网站也不会限制你。

还有,不要用同一个账号做太多的事情。最好是多个账号轮换使用,每个账号每天的访问量控制在合理范围内。

反反爬的优化方向:从对抗到共生

讲了这么多突破反爬的方法,其实我想告诉大家的是,反爬和反反爬从来都不是零和博弈。

网站做反爬,不是为了阻止所有的爬虫,而是为了阻止那些恶意的、会影响网站正常运行的爬虫。对于那些友好的、遵守规则的爬虫,大多数网站其实是默许的。

所以反反爬的最高境界,不是和网站硬刚,而是和网站达成一种共生关系。

具体来说,有以下几个优化方向:

第一,控制请求频率,不要给服务器造成太大的压力。这是最基本的,也是最重要的。如果你把网站爬崩了,网站肯定会想尽一切办法来对付你。

第二,遵守robots.txt协议。虽然robots.txt协议没有法律约束力,但它是网站和爬虫之间的一种约定。遵守这个约定,会让你看起来更像一个友好的爬虫。

第三,使用官方提供的API。如果网站提供了官方的API,优先使用API来获取数据。API通常比爬取网页更稳定,更高效,也不会触发反爬。

第四,缓存数据,不要重复爬取相同的内容。对于那些不会经常变化的数据,爬取一次之后就缓存起来,下次直接从缓存中读取。这样既可以减轻服务器的压力,也可以提高你的爬虫效率。

第五,尊重网站的知识产权。不要把爬取到的数据用于商业用途,不要泄露用户的隐私信息。这是一个程序员最基本的职业道德。

写在最后

反爬和反反爬是一场永无止境的博弈。今天你突破了这个反爬,明天网站就会更新那个反爬。没有永远有效的反爬技术,也没有永远有效的反反爬技术。

但万变不离其宗。只要你能站在网站防御者的角度,理解他们的底层逻辑,你就能在这场博弈中始终占据主动。

记住,反反爬不是比谁的技术更厉害,而是比谁更了解对方。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/21 13:18:34

如何用Winhance中文版让你的Windows系统焕然一新?

如何用Winhance中文版让你的Windows系统焕然一新? 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Winhance-zh_CN …

作者头像 李华
网站建设 2026/5/21 13:15:03

如何用UndertaleModTool在3小时内完成你的第一个游戏修改?

如何用UndertaleModTool在3小时内完成你的第一个游戏修改? 【免费下载链接】UndertaleModTool The most complete tool for modding, decompiling and unpacking Undertale (and other GameMaker games!) 项目地址: https://gitcode.com/gh_mirrors/un/UndertaleM…

作者头像 李华
网站建设 2026/5/21 13:14:17

开源项目分享——Cube

Executive Summary Cube(原名 Cube.js)是由 Cube Dev 公司开源的语义层平台,定位为 AI、BI 和嵌入式分析的统一数据访问层。项目 GitHub Stars 突破 20,000,Fork 数超 2,000,最新版本 v1.6.48(2026-05-19&a…

作者头像 李华
网站建设 2026/5/21 13:13:53

Cursor Pro破解工具:5步轻松实现AI编程助手永久免费使用方案

Cursor Pro破解工具:5步轻松实现AI编程助手永久免费使用方案 【免费下载链接】cursor-free-vip [Support 0.45](Multi Language 多语言)自动注册 Cursor Ai ,自动重置机器ID , 免费升级使用Pro 功能: Youve reached yo…

作者头像 李华
网站建设 2026/5/21 13:13:50

角色扮演法:让 AI 扮演刁钻的用户,帮你挖掘隐藏的异常测试场景

引言:当“穷举”不再有效 软件测试领域有一个根深蒂固的信念:只要设计足够多的测试用例,覆盖所有可能的输入组合,系统的缺陷就会被一网打尽。这个信念在确定性系统时代大致成立——你输入 A,系统输出 B,偏差就是缺陷。逻辑链条清晰、可验证、可穷举。 但当测试对象从确…

作者头像 李华
网站建设 2026/5/21 13:12:00

高速视界,精准触达:MIPI 图像采集设备赋能高端视觉测试

MIPI 技术背景在 5G、AI、车载电子、高端影像与工业检测飞速发展的今天,高分辨率、高帧率、低延迟、高稳定的图像数据传输与采集,成为产品研发、测试与量产的核心瓶颈。MIPI CSI-2 接口凭借低功耗、高带宽、抗干扰强等优势,已成为手机、车载、…

作者头像 李华