近日,有位站長(zhǎng)聯(lián)系上主機(jī)吧,表示網(wǎng)站被惡意訪問,服務(wù)器帶寬占滿,CPU飆升100%。
查看網(wǎng)站請(qǐng)求日志發(fā)現(xiàn)訪問頻率不高,但每隔一段時(shí)間就會(huì)出現(xiàn)大量訪問,而這些訪問的IP、ua都不同,訪問的url也不同,很難通過特征攔截這類惡意請(qǐng)求。
不過,百度云防護(hù)近期上線了JA3 限定規(guī)則,該規(guī)則是通過識(shí)別TLS指紋來對(duì)客戶端進(jìn)行識(shí)別,TLS 指紋(TLS Fingerprint)是一種被動(dòng)識(shí)別客戶端身份的技術(shù),它通過分析客戶端在 TLS 握手階段發(fā)送的ClientHello 數(shù)據(jù)包中的各種字段組合,生成一個(gè)唯一的“指紋”值(通常是哈希),用來標(biāo)識(shí)特定的客戶端軟件或工具。
舉個(gè)例子
當(dāng)你用 Chrome 瀏覽器訪問一個(gè) HTTPS 網(wǎng)站時(shí),Chrome 會(huì)發(fā)送一個(gè) ClientHello 數(shù)據(jù)包,里面包含:
支持的 TLS 版本
加密套件列表(如 TLS_AES_128_GCM_SHA256
)
擴(kuò)展字段(如 server_name
, supported_groups
, application_layer_protocol_negotiation
)
擴(kuò)展順序和長(zhǎng)度
這些字段的組合幾乎是獨(dú)一無二的,就像人的指紋一樣。
如果大量請(qǐng)求的 TLS指紋 指紋相同,可能是同一批爬蟲工具發(fā)起。
百度云防護(hù)的JA3 限定規(guī)則就是針對(duì)這個(gè)TLS指紋的限制,達(dá)到限制爬蟲的目的。
因?yàn)槿?Python 的 requests
庫、Selenium、Playwright 等工具的 TLS 指紋與真實(shí)瀏覽器不同的。
我們給這位客戶網(wǎng)站接入百度云防護(hù)后,果然攔截了一大堆JA3 限制規(guī)則。

通過攔截日志我們可以看到,攔截的惡意訪問URL地址不同、UA不同、IP也不同,傳統(tǒng)的特征識(shí)別根本無法正常處理,因?yàn)檫@些單IP不僅訪問頻率低,URL網(wǎng)址同一個(gè)地址訪問頻率也很低,連瀏覽器UA也不同。

但其實(shí)他們都是來自同一個(gè)客戶端的請(qǐng)求,所以在百度云防護(hù)的JA3 限定規(guī)則里,是會(huì)被攔截的。