黃曄華,朱 倩
(1.無錫工藝職業(yè)技術(shù)學(xué)院信息中心,江蘇 無錫 214200;2.江蘇大學(xué)計(jì)算機(jī)科學(xué)與通信工程學(xué)院,江蘇 鎮(zhèn)江 212001)
網(wǎng)站通過提供信息搜索、社交和網(wǎng)絡(luò)游戲等豐富的網(wǎng)頁服務(wù)來吸引用戶。然而攻擊者可以偽裝成普通用戶,利用網(wǎng)絡(luò)機(jī)器人對這些網(wǎng)站發(fā)起攻擊,消耗寶貴的資源,如內(nèi)存和帶寬。文獻(xiàn)[1]中指出51%的網(wǎng)站流量是“非人為”的,主要是來自各種各樣的自動(dòng)黑客工具和網(wǎng)絡(luò)機(jī)器人。
XRumer、Magic Submitter 和SENuke 等網(wǎng)絡(luò)機(jī)器人已經(jīng)被開發(fā)出來,用于在黑帽搜索引擎優(yōu)化(Search Engine Optimization,SEO)技術(shù)中創(chuàng)建反向鏈接,在網(wǎng)絡(luò)服務(wù)器上創(chuàng)建內(nèi)容,通過識別特殊HTML 元素的含義和功能來批量注冊免費(fèi)服務(wù)。其中,XRumer[2]作為最強(qiáng)大和最受歡迎外鏈工具之一,可以被用來自動(dòng)注冊虛假論壇帳號,創(chuàng)建瀏覽歷史,發(fā)送垃圾郵件,提升搜索引擎排名等[3-4]。XRumer 還能夠規(guī)避論壇管理員常用的垃圾郵件預(yù)防機(jī)制(例如:驗(yàn)證碼機(jī)制)。
現(xiàn)有的解決辦法主要有兩種類型,一是基于機(jī)器學(xué)習(xí)技術(shù),通過檢測機(jī)器行為特征來識別網(wǎng)絡(luò)機(jī)器人[5]。Shin et.al.[4]研究了論壇垃圾郵件的特點(diǎn),并開發(fā)了輕量級的特性來檢測垃圾郵件。Brewer etal.[6] 使用鏈接混淆來檢測和防御網(wǎng)絡(luò)機(jī)器人。Gundy[7]等人通過比較博客文章中所使用的語言模型、評論和相關(guān)的頁面來檢測評論垃圾信息。二是驗(yàn)證碼技術(shù)。然而,安全性并不是設(shè)計(jì)驗(yàn)證碼的唯一關(guān)注點(diǎn),所有的驗(yàn)證碼系統(tǒng)都是人類互動(dòng)形式,需要用戶的參與。目前的驗(yàn)證碼系統(tǒng)可以分為基于文本的驗(yàn)證碼[8-9]和基于圖像的驗(yàn)證碼[10-11]?;谖谋镜尿?yàn)證碼系統(tǒng)要求用戶識別字母或數(shù)字,復(fù)雜的驗(yàn)證碼會帶來較差的用戶體驗(yàn)。由于智能網(wǎng)絡(luò)機(jī)器人可以擊敗基于文本的驗(yàn)證碼系統(tǒng),于是設(shè)計(jì)了基于圖像的驗(yàn)證碼,驗(yàn)證碼的魯棒性取決于挑戰(zhàn)人工智能的難度,難度越高,抵御網(wǎng)絡(luò)機(jī)器人的復(fù)雜性越大,對合法用戶識別帶來的困難也相應(yīng)增加,可用性越低,用戶體驗(yàn)性更差。
為了在不影響用戶體驗(yàn)的前提下有效防御網(wǎng)絡(luò)機(jī)器人,借鑒移動(dòng)目標(biāo)防御(Moving Target Defense,MTD)的思想,設(shè)計(jì)了一種非干擾的動(dòng)態(tài)防御方法(Non-Intrusive Dynamic Defense System,NIDDS)。MTD 作為美國近年來提出的網(wǎng)絡(luò)空間“改變游戲規(guī)則”的革命性技術(shù)之一,受到了美國白宮的高度重視。它完全不同于以往的網(wǎng)絡(luò)安全研究思路,它并不追求建立一種完美無瑕的系統(tǒng)來對抗攻擊,而是構(gòu)建多樣的、不斷變化的評價(jià)和部署機(jī)制及策略[12]。這種不斷變化的機(jī)制和策略可以增加攻擊者執(zhí)行探測和攻擊的不確定性和復(fù)雜性,有效限制脆弱性暴露及被攻擊的機(jī)會,提高系統(tǒng)的魯棒性[13]。具體到網(wǎng)絡(luò)應(yīng)用來說,網(wǎng)絡(luò)機(jī)器人需要通過識別HTML 元素來獲取相應(yīng)參數(shù)的語義,達(dá)到偽造正常用戶請求的目的。NIDDS 主要針對這些能夠通過模擬真實(shí)用戶行為(填寫HTML 表單并點(diǎn)擊提交按鈕)向遠(yuǎn)程服務(wù)器自動(dòng)提交大量請求的網(wǎng)絡(luò)機(jī)器人,通過隨機(jī)化HTML 元素來阻止網(wǎng)絡(luò)機(jī)器人對其識別,從而達(dá)到防御目的。這一點(diǎn)與驗(yàn)證碼技術(shù)不同,它對用戶是完全透明的,不需要合法用戶通過人為操作來驗(yàn)證自己。
網(wǎng)絡(luò)機(jī)器人是一種針對特定網(wǎng)站瀏覽行為的自動(dòng)化程序。對很多網(wǎng)站來說,它們已經(jīng)成為一個(gè)巨大的威脅,造成很多安全問題,比如:網(wǎng)絡(luò)釣魚和垃圾郵件,消耗服務(wù)器資源,降低用戶體驗(yàn)。以下來介紹NIDDS 所針對的網(wǎng)絡(luò)機(jī)器人及其主要威脅。
當(dāng)前,網(wǎng)絡(luò)機(jī)器人主要分為固定式機(jī)器人和自學(xué)式機(jī)器人兩大類。固定式機(jī)器人是用固定的腳本語言寫好的,發(fā)送一些簡單和固定的HTTP 請求,一旦目標(biāo)網(wǎng)絡(luò)應(yīng)用改變其內(nèi)容時(shí),這類機(jī)器人一般就會失效。社交網(wǎng)絡(luò)上的給用戶反復(fù)發(fā)送垃圾郵件的跨站點(diǎn)腳本蠕蟲就屬于這類機(jī)器人。自學(xué)式機(jī)器人比固定式更高級、更智能、更復(fù)雜。它可以通過分析目標(biāo)網(wǎng)絡(luò)應(yīng)用的變化來自我進(jìn)化,還可以通過模仿用戶瀏覽行為來發(fā)送數(shù)據(jù)提交請求(包含用戶信息,比如用戶身份驗(yàn)證請求包含用戶名和密碼)。XRumer 就是一種典型的自學(xué)式機(jī)器人,它可以收集HTML 表單旁邊的用戶名,數(shù)據(jù)類型和標(biāo)簽文本,然后填充這些輸入表格,向服務(wù)器提交相應(yīng)的HTTP 請求。本文所防御的主要是以上兩種網(wǎng)絡(luò)機(jī)器人,尤其是第2 種。
網(wǎng)絡(luò)機(jī)器人主要有以下幾種攻擊方式:1)大量注冊/登錄帳戶[14];2)濫發(fā)評論。利用網(wǎng)絡(luò)機(jī)器人來發(fā)布定制信息(例如:在論壇、博客等在線社交網(wǎng)絡(luò)上的評論欄里發(fā)布惡意鏈接;3)發(fā)送垃圾郵件[4]。利用郵件服務(wù)器向受害者發(fā)送垃圾郵件,并利用網(wǎng)絡(luò)機(jī)器人自動(dòng)提交網(wǎng)站表單的電子郵件內(nèi)容;4)在線投票作弊。投票機(jī)器人是一種特殊的網(wǎng)絡(luò)機(jī)器人,它可以篡改在線投票結(jié)果[15];5)基于網(wǎng)絡(luò)的游戲自動(dòng)化。網(wǎng)絡(luò)游戲機(jī)器人是為了在游戲中自動(dòng)化某些重復(fù)性的任務(wù)而開發(fā)的,違反了在線游戲公平競爭的政策。
如2.1 節(jié)所述,網(wǎng)絡(luò)機(jī)器人在發(fā)起攻擊之前需要預(yù)先識別HTML 表單元素的唯一id/name 參數(shù)值,以實(shí)現(xiàn)自動(dòng)訪問遠(yuǎn)程服務(wù)器。由于name/id 參數(shù)在服務(wù)器端邏輯層中使用,因此,這些參數(shù)通常為常量,網(wǎng)絡(luò)機(jī)器人便可以利用這些常量值自動(dòng)生成大量請求。NIDDS 就是通過隨機(jī)化HTML 元素的name/id 值實(shí)現(xiàn)將其隱藏的目的,以此來防御網(wǎng)絡(luò)機(jī)器人。
通過修改網(wǎng)絡(luò)應(yīng)用的源代碼,可以在服務(wù)器端部署NIDDS。此外,NIDDS 還可以作為服務(wù)器和客戶端之間的第三方中介,以避免增加服務(wù)器端邏輯層的復(fù)雜性。NIDDS 作為第三方中介還可以普遍應(yīng)用于不同的網(wǎng)絡(luò)應(yīng)用和客戶端技術(shù)(例如:不同的瀏覽器和插件)中。此外,NIDDS 不需要隨機(jī)化所有的網(wǎng)頁,只需要隨機(jī)化用戶可以提交數(shù)據(jù)里的一小部分HTML 表單頁。
NIDDS 的中介方案主要由3 部分組成,如圖1所示:元素標(biāo)記模塊、隨機(jī)數(shù)發(fā)生模塊和去隨機(jī)化模塊。其工作流程如下:一旦遠(yuǎn)程服務(wù)器回復(fù)客戶端與HTML 表單相關(guān)的網(wǎng)頁源代碼響應(yīng),如HTML、Javascript 和CSS,NIDDS 將攔截這些響應(yīng),并利用元素標(biāo)記模塊在源代碼中標(biāo)記這些HTML 元素供去隨機(jī)化模塊進(jìn)行識別。這些元素可以是網(wǎng)頁中的HTML 元素或用于實(shí)現(xiàn)網(wǎng)絡(luò)服務(wù)功能的特定元素類型,比如在特定網(wǎng)頁上發(fā)布的內(nèi)容(評論、帖子、博客等),收集用戶的電子郵件地址等等。然后,隨機(jī)數(shù)發(fā)生模塊使用新的隨機(jī)值替換源代碼中標(biāo)記元素的參數(shù)值,并將隨機(jī)的HTTP 表單頁傳遞給客戶端。一旦客戶端接收并提交隨機(jī)表單頁,去隨機(jī)化模塊將恢復(fù)這些被標(biāo)記元素的原始參數(shù)值,并將其傳遞給服務(wù)器。以下詳細(xì)描述NIDDS 系統(tǒng)的設(shè)計(jì)。
圖1 NIDDS 系統(tǒng)框架示意圖
元素標(biāo)記模塊是用來標(biāo)記受NIDDS 保護(hù)和隨機(jī)化的元素。NIDDS 根據(jù)需要隨機(jī)化一個(gè)關(guān)鍵HTML 元素子集而忽略其他元素(例如:按鈕和鏈接等導(dǎo)航元素很難被攻擊者利用)。關(guān)鍵HTML 元素包括:1)允許用戶在網(wǎng)頁中發(fā)布內(nèi)容的元素;2)遠(yuǎn)程服務(wù)器用來生成電子郵件標(biāo)題的元素;3)服務(wù)器用來修改或更新其他服務(wù)器資源(如數(shù)據(jù)庫、文件和內(nèi)存狀態(tài))的元素;4)作為請求中參數(shù)一部分的元素。
在知道哪些元素需要隨機(jī)化之后,就可以對網(wǎng)頁源代碼中的那些元素進(jìn)行標(biāo)注,以供隨機(jī)數(shù)發(fā)生模塊識別。既可以通過給那些參數(shù)添加一個(gè)獨(dú)特并且特定的前綴,也可以指定新的參數(shù)值來實(shí)現(xiàn)標(biāo)注功能。本文選擇第一個(gè)方法,即通過添加一個(gè)特殊的前綴字符串(名為“P-tag”)來標(biāo)注元素的“name/id”參數(shù)值,本文使用_EaRmN_字符串(通常不會在網(wǎng)頁源代碼中使用)作為P-tag。例如:如果一個(gè)帶有“提交”id 值(例如:“< button type = button id =submit>”)的提交按鈕需要隨機(jī)化,元素標(biāo)記模塊會將此元素標(biāo)注為“< button type = button id =_EaRmN_submit>”。
隨機(jī)數(shù)發(fā)生模塊會將帶有P-tag 標(biāo)記的元素隨機(jī)化,為了保證NIDDS 不需要保存原始值就能去隨機(jī)化,該模塊使用對稱加密機(jī)制。整個(gè)隨機(jī)化過程可以分為4 個(gè)主要步驟,如圖2 所示。
圖2 隨機(jī)化過程示意圖
1)生成主密鑰。系統(tǒng)每隔T(試驗(yàn)中T 取值為30 min)時(shí)間周期性地生成一個(gè)主密鑰來加密帶標(biāo)注的參數(shù)。生成主密鑰應(yīng)該既快速又高效,因?yàn)榫W(wǎng)絡(luò)服務(wù)器每天可能響應(yīng)數(shù)百萬個(gè)請求。因此,本文采用Xorshift 隨機(jī)數(shù)發(fā)生器[16],通過對種子數(shù)進(jìn)行“xor”操作移位生成隨機(jī)數(shù)序列。種子數(shù)可以是一個(gè)隨機(jī)計(jì)數(shù)器,也可以是服務(wù)器的特定系統(tǒng)狀態(tài)值,例如系統(tǒng)時(shí)間和當(dāng)前進(jìn)程數(shù)。會話中主密鑰的更改可能導(dǎo)致去隨機(jī)化的錯(cuò)誤,一旦服務(wù)器和客戶機(jī)之間建立了會話,NIDDS 將加載當(dāng)前主密鑰并使用它來保護(hù)整個(gè)會話的網(wǎng)絡(luò)資源。這樣,即使在會話期間生成了新的主密鑰,當(dāng)前會話也不會被破壞。
2)生成客戶端會話密鑰。對于每個(gè)會話,在生成主密鑰之后,隨機(jī)數(shù)發(fā)生模塊將主密鑰和特定客戶端標(biāo)識符(如IP 地址)通過哈希計(jì)算,生成為特定的客戶端會話密鑰。使用客戶端標(biāo)識符可以保證網(wǎng)頁和java 腳本是由同一個(gè)客戶端會話密鑰隨機(jī)生成。
3)生成隨機(jī)參數(shù)值。在獲取客戶端會話密鑰后,就可以用該密鑰在P-tag 標(biāo)記的參數(shù)值上使用任意加密密碼(例如AES)來計(jì)算隨機(jī)參數(shù)值。盡管服務(wù)器在傳輸HTML 頁面后可能會將一些java 腳本傳輸給客戶端,但是NIDDS 能將java 腳本和相應(yīng)的網(wǎng)頁請求之間的關(guān)系記錄下來,然后用同一個(gè)客戶端密鑰和主密鑰將java 腳本(去)隨機(jī)化。
4)添加P-tag。為了表示那些應(yīng)該去隨機(jī)化的元素,隨機(jī)數(shù)發(fā)生模塊再次為隨機(jī)參數(shù)值添加Ptag 標(biāo)記。最后,NIDDS 將隨機(jī)的網(wǎng)絡(luò)資源傳給客戶端。
上述過程結(jié)束時(shí),所有HTML 元素都被混淆了,網(wǎng)絡(luò)機(jī)器人無法識別正確的參數(shù),也就無法向服務(wù)器發(fā)送大量的、正確的HTTP 請求。
服務(wù)器一旦收到請求,將會根據(jù)所收到的隨機(jī)化網(wǎng)頁源代碼,用P-tag 前綴將這些“name/id”參數(shù)值去隨機(jī)化,變成原來的參數(shù)值,具體步驟如圖3所示。
圖3 去隨機(jī)化過程示意圖
1)找出P-tag 標(biāo)記的參數(shù)值。當(dāng)去隨機(jī)化模塊接收到用戶的請求時(shí),首先找出所有包含P-tag 前綴的HTML 元素的參數(shù)值。
2)去除參數(shù)值中的P-tag 標(biāo)記。
3)計(jì)算客戶端會話密鑰。去隨機(jī)化模塊恢復(fù)出當(dāng)前主密鑰并使用客戶端標(biāo)識符信息來計(jì)算客戶端會話密鑰。使用哈希函數(shù)計(jì)算客戶端會話密鑰的方法與在隨機(jī)數(shù)發(fā)生器中使用的方法類似。由于主密鑰和這些標(biāo)識符信息在會話期間不會發(fā)生變化,因此,可以獲得與隨機(jī)化參數(shù)值相同的客戶端會話密鑰。
4)生成初始參數(shù)值。去隨機(jī)化模塊利用客戶端會話密鑰來解密隨機(jī)參數(shù)值。然后刪除P-tag 前綴,生成原始參數(shù)值,并將其發(fā)送回服務(wù)器。
如第2.1 節(jié)所述,NIDDS 作為服務(wù)器和客戶端之間的第三方中介的設(shè)計(jì)方案,可以避免增加網(wǎng)絡(luò)應(yīng)用的服務(wù)器端邏輯層的復(fù)雜性。文中采用代理的方式來實(shí)現(xiàn)上述系統(tǒng)的搭建。
對Privoxy[17]的源代碼進(jìn)行修改,通過添加一個(gè)NIDDS 模塊來生成可以實(shí)現(xiàn)NIDDS 功能的代理。Privoxy 是一個(gè)具有高級過濾功能的開源和非緩存網(wǎng)絡(luò)代理,允許修改網(wǎng)頁和HTTP 頭信息。在Privoxy 中用C 語言實(shí)現(xiàn)perl 兼容的正則表達(dá)式,使用Pcre 模塊[18]來搜索和替換內(nèi)容。Pcre 模塊允許使用正則表達(dá)式對P-tag 標(biāo)記的參數(shù)進(jìn)行搜索,并使用隨機(jī)值替換它們。然后在Privoxy 的請求或者響應(yīng)處理模塊中連接NIDDS,緩沖并修改HTTP 表單頁,最終發(fā)送給客戶端。
在3 個(gè)流行的網(wǎng)絡(luò)平臺(phpBB,BuddyPress,WordPress)上對NIDDS 的安全性和開銷進(jìn)行評估。phpBB 是最受歡迎的開源論壇平臺之一。WordPress已經(jīng)發(fā)展成為一個(gè)強(qiáng)大的網(wǎng)站設(shè)計(jì)和內(nèi)容管理系統(tǒng)平臺[19]。BuddyPress 是一個(gè)建立在WordPress 之上的,提供建立網(wǎng)站和社交網(wǎng)絡(luò)功能的開源平臺。
針對三大平臺上的3 種常見網(wǎng)絡(luò)機(jī)器人(如表1 所示)對NIDDS 的性能進(jìn)行評估。XRumer 是使用最廣泛網(wǎng)絡(luò)機(jī)器人[2]。Magic Submitter 允許用戶在博客和社交網(wǎng)絡(luò)上自動(dòng)提交大量信息。SENuke 是主要為SEO 而設(shè)計(jì)的商業(yè)網(wǎng)絡(luò)機(jī)器人。
表1 平臺上常見網(wǎng)絡(luò)機(jī)器人列表
NIDDS 在論壇和流行的開源系統(tǒng)上進(jìn)行安全性評估。XRumer、Magic Submitter 和SENuke 可以在網(wǎng)站上自動(dòng)創(chuàng)建文章、評論或填充Web 表單。使用NIDDS 來保護(hù)“門戶頁面”,如登錄頁面、帖子頁面、評論頁面和注冊頁面。然后,運(yùn)行這3 個(gè)機(jī)器人,在裝有NIDDS 的網(wǎng)站上嘗試注冊、登錄、發(fā)帖或者發(fā)表評論。實(shí)驗(yàn)結(jié)果顯示,NIDDS 可以在不同平臺上成功防御3 個(gè)機(jī)器人。
下面詳細(xì)介紹一個(gè)NIDDS 抵御XRumer 的實(shí)例。XRumer 試圖在phpBB3 平臺上自動(dòng)創(chuàng)建新線程。當(dāng)不使用NIDDS 時(shí),XRumer 可以成功地發(fā)布一個(gè)phpBB 帖子,如下頁圖4(a)所示。具體地說,XRumer 首先發(fā)出一個(gè)請求,并驗(yàn)證該帖子是否創(chuàng)建成功。然后,當(dāng)啟用NIDDS 時(shí),P-tag 被附加到線程創(chuàng)建表單元素中,XRumer 無法識別這些HTML元素,導(dǎo)致一個(gè)空的請求體,帖子創(chuàng)建失敗,如圖4(b)所示?!癠know”狀態(tài)表示XRumer 無法被識別該未知頁面。
圖4 XRumer 創(chuàng)建帖子成功、失敗圖
根據(jù)以下兩個(gè)指標(biāo)來評估NIDDS 的性能開銷:頁面加載時(shí)間和頁面大小。在3 個(gè)網(wǎng)絡(luò)平臺(phpBB、Wordpress、Buddypress)上的5 種不同類型的網(wǎng)頁(發(fā)帖頁面(NT)、回復(fù)頁面(Post)、帳戶登錄頁面(Log)、評論頁面(Comt)和注冊頁面(Reg))來評估NIDDS。這些網(wǎng)絡(luò)平臺和網(wǎng)頁類型如表2 所示,其中“P-tag”表示在網(wǎng)頁中隨機(jī)化的HTML 元素的數(shù)量。
表2 網(wǎng)頁類型表
1)頁面加載時(shí)間。頁面加載時(shí)間(Page loading time,PLT)是指發(fā)送請求與瀏覽器完全加載一個(gè)網(wǎng)頁的時(shí)間間隔。本文使用Mozilla Firefox 的addon LORI[20]來計(jì)算加載和顯示網(wǎng)頁的時(shí)間,PLT 越高表示使用NIDDS 帶來的開銷越高。圖5 顯示了在3 個(gè)網(wǎng)絡(luò)平臺上不同網(wǎng)頁類型的PLT 值。T1 表示保護(hù)整個(gè)網(wǎng)頁所需要的PLT 值(s);T2 表示保護(hù)一個(gè)P-tag元素所需要的平均PLT 值(s)。
圖5 不同網(wǎng)頁類型的PLT 值表
從圖5 中可以看出,NIDDS 所帶來的PLT 增加量小于0.3 s,平均增加量為14.29%,最高增加百分比小于30 %,但是這僅在少量HTML 表單頁上產(chǎn)生,而不是用戶瀏覽的大多數(shù)常規(guī)網(wǎng)頁。此外,由于上述評估基于一個(gè)具有有限處理能力的虛擬機(jī)環(huán)境,在真正的網(wǎng)絡(luò)服務(wù)器上,使用代碼優(yōu)化后的NIDDS 性能會更好。而且,每個(gè)PLT 值都是由帶有空緩存的瀏覽器測得,所以在真實(shí)的帶有緩存存儲的通信場景下開銷會下降更多。
2) 頁面大小。依然使用Mozilla Firefox 的addon LORI[20]來測量網(wǎng)頁的大小。phpBB3 上未使用NIDDS(標(biāo)記為Ori)和使用NIDDS(標(biāo)記為NID)之后不同類型頁面的大小如表3 所示。所有網(wǎng)頁都有6 個(gè)P-tag 標(biāo)記的元素。從表3 中可以看出,NIDDS 所帶來的網(wǎng)頁大小的開銷相對較小,平均增加量只有0.225 kB。原因在于這些開銷主要來自于P-tag 標(biāo)記元素值的前綴。
表3 網(wǎng)頁大小表
從評估結(jié)果可以看出,NIDDS 可以較低的頁面加載時(shí)間和頁面大小開銷來有效防御現(xiàn)有的網(wǎng)路機(jī)器人。
本文提出了一種非侵入式的動(dòng)態(tài)防御系統(tǒng)來針對網(wǎng)絡(luò)機(jī)器人,它不需要用戶參與識別被標(biāo)記的元素,是一種隱式的防御方法來使網(wǎng)絡(luò)機(jī)器人的攻擊行為失效,而驗(yàn)證碼方法則需要降低用戶體驗(yàn)來應(yīng)對攻擊行為。當(dāng)然,如果服務(wù)器和客戶端之間通過SSL 加密通信,NIDDS 的中介方案將會失效。但這只是部署方法的局限性,在服務(wù)器端部署NIDDS,通過直接修改Web 應(yīng)用程序可以解決這一問題。從評估結(jié)果可以看出,NIDDS 可以在多個(gè)流行網(wǎng)絡(luò)平臺上擊敗大部分網(wǎng)絡(luò)機(jī)器人,并且?guī)淼木W(wǎng)頁加載時(shí)間和網(wǎng)頁大小開銷較低。