近日,有位站长联系上主机吧,表示网站被恶意访问,服务器带宽占满,CPU飙升100%。
查看网站请求日志发现访问频率不高,但每隔一段时间就会出现大量访问,而这些访问的IP、ua都不同,访问的url也不同,很难通过特征拦截这类恶意请求。
不过,百度云防护近期上线了JA3 限定规则,该规则是通过识别TLS指纹来对客户端进行识别,TLS 指纹(TLS Fingerprint)是一种被动识别客户端身份的技术,它通过分析客户端在 TLS 握手阶段发送的ClientHello 数据包中的各种字段组合,生成一个唯一的“指纹”值(通常是哈希),用来标识特定的客户端软件或工具。
举个例子
当你用 Chrome 浏览器访问一个 HTTPS 网站时,Chrome 会发送一个 ClientHello 数据包,里面包含:
支持的 TLS 版本
加密套件列表(如 TLS_AES_128_GCM_SHA256
)
扩展字段(如 server_name
, supported_groups
, application_layer_protocol_negotiation
)
扩展顺序和长度
这些字段的组合几乎是独一无二的,就像人的指纹一样。
如果大量请求的 TLS指纹 指纹相同,可能是同一批爬虫工具发起。
百度云防护的JA3 限定规则就是针对这个TLS指纹的限制,达到限制爬虫的目的。
因为如 Python 的 requests
库、Selenium、Playwright 等工具的 TLS 指纹与真实浏览器不同的。
我们给这位客户网站接入百度云防护后,果然拦截了一大堆JA3 限制规则。

通过拦截日志我们可以看到,拦截的恶意访问URL地址不同、UA不同、IP也不同,传统的特征识别根本无法正常处理,因为这些单IP不仅访问频率低,URL网址同一个地址访问频率也很低,连浏览器UA也不同。

但其实他们都是来自同一个客户端的请求,所以在百度云防护的JA3 限定规则里,是会被拦截的。