一. 背景介绍
数据反爬,一直以来都是网站和app绕不开的基础问题。尤其是平台的规模扩大,各种功能性的接口包含的信息量越来越多,这也让各种目的的脚本爬虫有了获利的空间和爬取数据的动力。
而对于一个平台而言,爬虫流量不同于正常流量,基本上无法带来正向的效益(除了搜索引擎爬虫尚且有推广平台的效果),它们对平台的危害是多方面的:
- (1)对平台开发和运维,爬虫大量的恶意请求极大地占用了平台服务端带宽和计算资源,让平台无故增加了运维的成本,一些保护程度较低的接口还可能被爬虫流量撑爆,甚至会连锁反应造成平台的故障。
- (2)对于用户来说,个人的活动和隐私信息或多或少会存放在平台上,爬虫会造成用户的信息泄露,这些信息还可能会被用于诈骗等犯罪活动,导致无法挽回的恶劣影响。
- (3)对平台运营来说,平台上的活动信息被爬取,使得羊毛党团伙能够在第一时间获取到活动的相关信息,大量羊毛党小号涌入活动会挤占正常用户的活动参与名额,不仅危害业务功能的正常秩序,还会造成活动资金被羊毛党薅走,严重降低活动的运营效果。
二. 常见手段
三. 拒绝请求
-
根据 IP 判断
优点:
- 即时效果:一旦IP地址被封禁,来自该地址的流量将立即停止,从而防止了爬虫在封禁发生后进一步访问网站。
- 简单易行:IP封禁通常很容易实施,大多数服务器和CDN服务都提供了相应的工具来帮助封锁一系列的IP地址。
- 降低负载:通过封禁恶意或不必要的爬虫访问,可以减少服务器的负载,节省带宽并改善响应时间。
缺点:
- IP代理和更换:爬虫可以使用代理服务器或经常更换IP地址来绕过封禁,这使得根据IP封禁的效果可能很短暂。
- 误封正常用户:如果多个用户共享一个IP地址(例如在一个公司或通过NAT),封禁该IP可能会阻止无辜的用户访问网站。
- 动态IP分配问题:因为IP地址可能会动态分配,封禁了过去用于恶意爬虫行为的IP地址,有可能会阻断新的合法用户。
- 维护成本:封禁爬虫需要监测和更新封锁列表,这可能会导致额外的维护工作和成本。
- 不影响分布式爬虫:分布式网络爬虫使用一个广泛的IP地址池,单个IP的封禁对其影响较小。
-
根据设备指纹判断
介绍:
使用设备指纹来封禁爬虫意味着要收集并分析客户端设备的一组唯一属性,以区分人类用户和爬虫。这些属性可以是用户代理字符串、屏幕分辨率、操作系统和版本、浏览器插件、语言设置、时区、是否启用了JavaScript等。
实现方式基本如下:
- 数据收集:通过客户端脚本(如JavaScript)或服务器端技术收集访问者的设备信息。
- 指纹生成:将收集到的数据组合成一个哈希值或一个唯一标识符,即所谓的“设备指纹”。
- 分析对比:分析收集到的指纹数据,对比已知的爬虫指纹数据库或行为模式,确定哪些是爬虫。
- 封禁机制:一旦确定某个指纹属于爬虫,可以通过中间件或防火墙规则来阻止这些指纹的后续请求。
- 动态学习:不断更新爬虫数据库,使用机器学习等技术提升识别模型的准确性。
优点:
- 难以模拟:相较于IP地址,设备指纹包含多个维度的信息,更难被模拟或隐藏。
- 个性化检测:可以检测到更加复杂和个性化的爬虫特征。
- 更精细的访问控制:允许对不同类型的访问者应用不同的访问策略。
- 行为分析:结合行为分析,你可以识别出即便在使用正常设备指纹的情况下仍然表现出爬虫特征的行为。
- 提高安全性:除了防爬虫,设备指纹同样可以辨识并防御更广泛的恶意活动。
- 长期有效性:设备指纹具有一定的持久性,例如某个浏览器的指纹在短期内不太可能改变。
缺点:
-
隐私顾虑:收集设备指纹可能引起隐私方面的担忧,特别是在一些地区可能会违使用设备指纹来封禁爬虫涉及收集和分析访问网站的设备的特定特征(如浏览器类型、字体列表、插件、屏幕分辨率等)。这些信息可以被编译成一个唯一标识符,即“设备指纹”,用于区分和识别可能的爬虫。
-
技术复杂性:收集正确的信息并构建设备指纹需要复杂的前端代码和后台分析。
-
误判风险:可能无意中封禁了合法用户,因为有些用户可能和爬虫有相似的技术特征。
-
维护成本:随着设备和浏览器技术的改进,需要定期更新你的指纹技术和算法。
-
绕过策略:虽然复杂,但一些高级爬虫工具可能通过模拟或改变其设备指纹来规避检测。
-
性能影响:客户端收集信息的程序可能会影响网站加载速度和用户体验。
四. 数据投毒
实现手段:
- 混淆数据 网站可以提供一些伪造或扭曲的数据来迷惑数据爬虫,比如更改价格、产品名称或描述等信息。
- 动态内容生成 网站可以针对不同的访问者显示不同的内容,这样爬虫收集的数据就不具备一致性和准确性。
- 隐藏真实数据 将真实数据和虚假数据混合在一起,以致爬虫难以区分哪些是有效的。
- 添加诱饵链接 在网页中添加看似正常但实际上是用于跟踪爬虫的假链接(“蜜罐”技术),访问这些链接的爬虫会被标记为可疑并加以限制。
数据投毒的优点:
- 保护内容 阻止敏感或具有价值的信息被滥用。
- 混淆对手 如果竞争对手依赖于爬取的数据,错误的信息可能导致他们做出错误的决策。
- 迷惑算法 在竞争对手使用爬取数据喂养其机器学习模型的情况下,投毒数据可以干扰模型的准确度。
数据投毒的缺点:
- 策略制定困难,可能影响用户体验 如果普通用户接触到了错误的数据,可能会对网站信誉造成损害。
- 维护难度 需要持续更新伪造策略,以应对更智能的爬虫技术。
- 合法性问题 在某些情况下,提供虚假信息可能会违反法律法规,尤其是在商业环境中。
五. 行为验证码
常见形式:
(从上到下体验依次变差)
优点:
- 安全性更高:目前市场有专业做行为验证码的厂家,可以有效识别和阻止自动化工具,减少恶意爬虫访问网站,抓取敏感数据的风险。
- 易于实施:许多行为验证码服务提供简单的API接口,便于网站运营者集成和部署。
- 适应性强:有些行为验证码服务可以根据网站流量和行为模式进行自我调整,从而优化识别算法和验证难度。
- 额外资源:某些行为验证码服务(例如Google的reCAPTCHA)通过行为分析帮助改善其其他服务,例如用于ML训练的数据标注。
缺点:
- 用户打扰:尽管现代行为验证码令人少有干扰,但某些情况下,用户可能还是会被要求进行额外验证(如选择图片中的交通信号),这可能导致用户体验的下降。
- 隐私担忧:行为验证码可能需要收集用户的行为数据进行分析,这引起了一些隐私保护方面的担忧。
- 技术绕过:可以通过逆向技术,破解验证码的技术,并进行模拟,从而绕过行为验证码。
- 维护成本:如果使用的是第三方服务,可能需要支付使用费用,特别是在高流量的网站上。
- 依赖第三方服务:依赖于特定的服务提供商可能使网站受限于该服务的可用性和性能。如果服务发生中断,可能影响用户访问。
- 可访问性问题:对于有视觉或其他障碍的用户而言,验证过程可能需要额外的辅助技术支持才能完成
六. 手机验证码&账号
优点:
- 增强安全性:手机验证码为网站提供了额外的安全层,确保只有真正的用户可以访问敏感数据。
- 防止自动化攻击:自动化工具很难绕过需要发送至手机的一次性验证码的登陆系统,这显著减少了爬虫和机器人的入侵风险。
- 用户验证:通过手机验证码可以验证用户身份,增加了账户被非法访问的难度。
- 满足合规性需求:某些法规和标准可能要求多因素身份验证,使用手机验证码可以帮助满足这些要求。
缺点:
- 用户体验:强制用户使用手机验证码登录可能会使登陆过程变得繁琐,影响用户体验。
- 排他性:对没有手机或无法接收验证码的用户来说可能不方便,或有可能完全无法访问网站。
- 可能的技术问题:验证码的发送和接收可能由于技术故障或网络问题而被延迟,导致用户无法及时登陆。
- 成本问题:发送手机短信验证码可能会引入额外的运营成本,特别是在高流量网站上。
- 隐私考虑:需要用户提供电话号码可能引起隐私方面的担忧。
- 短信拦截或仿冒:尽管比传统的静态密码登陆要安全得多,但短信验证码并非无懈可击,高级攻击者可能利用SIM卡交换等手段拦截验证码。
七. 总结:
反爬虫的各种手段, 总的来说都是在技术难度、用户体验、经济成本这三者中找到一个平衡点,从而确保业务的正常运营,毕竟反爬虫并不会产生效益。如果爬虫方如果能在抓数据的时候, 注意不要给对方带来影响和损失,合理利用技术,想必还是能达到双赢的局面的。