黃子豪 張 舒
(山東科技大學(xué),山東 濟(jì)南250031)
網(wǎng)絡(luò)爬蟲在為使用者帶來(lái)極大便利的同時(shí),也對(duì)互聯(lián)網(wǎng)環(huán)境造成了直接或間接的威脅,社會(huì)各界開始關(guān)心針對(duì)于爬蟲的安全合法使用問(wèn)題。隨著大數(shù)據(jù)時(shí)代下互聯(lián)網(wǎng)的飛速發(fā)展,網(wǎng)絡(luò)爬蟲的應(yīng)用范圍越來(lái)越寬泛,同時(shí)互聯(lián)網(wǎng)安全管理人員應(yīng)當(dāng)及時(shí)了解并學(xué)習(xí)爬蟲的原理和“反爬”策略,以應(yīng)對(duì)各種惡意爬蟲腳本造成的威脅。
網(wǎng)絡(luò)爬蟲是一種自動(dòng)化提取網(wǎng)頁(yè)數(shù)據(jù)的腳本程序,眾多搜索引擎的底層重要構(gòu)成部分便是爬蟲,它為搜索引擎實(shí)現(xiàn)了互聯(lián)網(wǎng)中網(wǎng)頁(yè)信息的加載和收集。網(wǎng)絡(luò)爬蟲按照實(shí)現(xiàn)功能和技術(shù)特點(diǎn)可以分為以下幾種類型:通用網(wǎng)絡(luò)爬蟲、聚焦網(wǎng)絡(luò)爬蟲、深層網(wǎng)絡(luò)爬蟲等,實(shí)際的網(wǎng)絡(luò)爬蟲腳本大多都是由多種爬蟲技術(shù)相結(jié)合實(shí)現(xiàn)的。
通用的傳統(tǒng)爬蟲從一個(gè)或多個(gè)初始網(wǎng)頁(yè)的URL 開始抓取,首先獲得初始網(wǎng)頁(yè)的URL, 在爬取過(guò)程中不斷從當(dāng)前網(wǎng)頁(yè)中獲取新的URL處理后放入隊(duì)列中,直到滿足系統(tǒng)循環(huán)結(jié)束條件。
聚焦爬蟲則需要通過(guò)預(yù)先設(shè)置的網(wǎng)頁(yè)分析算法過(guò)濾掉與爬取數(shù)據(jù)無(wú)關(guān)的鏈接,保留下有效的網(wǎng)頁(yè)鏈接并將其放入待爬取的URL隊(duì)列。之后,它會(huì)按照一定的搜索策略從隊(duì)列中選擇即將爬取的網(wǎng)頁(yè)URL,并循環(huán)重復(fù)上述過(guò)程,直到滿足系統(tǒng)循環(huán)結(jié)束條件。相對(duì)于傳統(tǒng)爬蟲, 聚焦爬蟲系統(tǒng)還需解決對(duì)于爬取目標(biāo)的準(zhǔn)確定義、對(duì)網(wǎng)頁(yè)數(shù)據(jù)的分析過(guò)濾算法、對(duì)URL隊(duì)列的搜索策略等主要問(wèn)題。
爬蟲的基本流程可簡(jiǎn)化為以下四步:
1.1 向服務(wù)器發(fā)出請(qǐng)求。腳本通過(guò)HTTP 庫(kù)向目標(biāo)站點(diǎn)發(fā)出Request 請(qǐng)求,請(qǐng)求的內(nèi)容可包含headers 等信息,隨后等待服務(wù)器響應(yīng)。
1.2 獲取服務(wù)器響應(yīng)內(nèi)容。經(jīng)過(guò)服務(wù)器響應(yīng)后,會(huì)得到一個(gè)包含著所爬取頁(yè)面內(nèi)容的Response,但數(shù)據(jù)類型會(huì)有多種情況,需要進(jìn)行下一步的數(shù)據(jù)解析。
1.3 解析數(shù)據(jù)。響應(yīng)中所包含的內(nèi)容可能是JSON、HTML、二進(jìn)制數(shù)據(jù)文件等形式,可使用直接處理、正則表達(dá)式、爬蟲的解析庫(kù)等方法進(jìn)行解析,以便進(jìn)行數(shù)據(jù)的保存。
1.4 保存數(shù)據(jù)。數(shù)據(jù)的保存形式多種多樣,可將數(shù)據(jù)保存至任何特定格式的文件或文本中,也可保存至數(shù)據(jù)庫(kù)或表格中。(圖1)
互聯(lián)網(wǎng)就像一個(gè)規(guī)模巨大極其復(fù)雜的數(shù)據(jù)庫(kù),如何才能更高效的提取最有價(jià)值的信息日漸成為人們關(guān)注的問(wèn)題,于是網(wǎng)絡(luò)爬蟲憑借其自動(dòng)化和便捷性越來(lái)越受人們歡迎,目前已被廣泛應(yīng)用于互聯(lián)網(wǎng)各種使用場(chǎng)景。
圖1 爬蟲基本流程圖
2.1 爬蟲的功能。爬蟲是指腳本通過(guò)模擬人類行為操作訪問(wèn)目標(biāo)網(wǎng)站,但與人類訪問(wèn)不同的是,爬蟲可以根據(jù)一定的提取規(guī)則快速頻繁的提取到大量數(shù)據(jù), 并可以實(shí)現(xiàn)自動(dòng)化的數(shù)據(jù)清洗和保存。爬蟲的推廣和應(yīng)用使得人們對(duì)于數(shù)據(jù)提取和采集的工作更加得心應(yīng)手,提高了工作的效率和自動(dòng)化程度。
2.2 爬蟲的價(jià)值。2.2.1 爬蟲腳本可高效提取有價(jià)值的信息,降低技術(shù)成本,提高業(yè)務(wù)效率。2.2.2 爬蟲可根據(jù)信息的類別個(gè)性化定制抓取的策略,從而解決不同類型的問(wèn)題。2.2.3 爬蟲可通過(guò)信息的整合和利用獲取合法的最大效益的盈利。
在當(dāng)前大數(shù)據(jù)的時(shí)代背景下,互聯(lián)網(wǎng)作為一個(gè)開放和友好共享的環(huán)境已成為當(dāng)今世界不可缺少的一部分,它縮短了人們交流的距離,同時(shí)實(shí)現(xiàn)了信息的快速傳遞,提高了數(shù)據(jù)資源的共享速度和效率。同時(shí)互聯(lián)網(wǎng)也是一個(gè)相對(duì)自由和公平的平臺(tái),人們?cè)诨ヂ?lián)上共享和接受的信息都是平等一致的,不會(huì)受到各種因素限制,但就是因?yàn)檫@種自由性使得互聯(lián)網(wǎng)爬蟲缺少了現(xiàn)實(shí)世界中法律法規(guī)的約束,逐步形成互聯(lián)網(wǎng)中的“真空地帶”。
當(dāng)爬蟲技術(shù)缺少了法律的規(guī)制和約束時(shí),惡意爬蟲就會(huì)危及互聯(lián)網(wǎng)安全。由圖2 中顯示的2013 年-2015 年中互聯(lián)網(wǎng)訪問(wèn)行為比例可以看出爬蟲的訪問(wèn)比例正在逐漸升高,根據(jù)數(shù)據(jù)分析表明目前互聯(lián)網(wǎng)中存在的爬蟲行為有近三成是惡意的,同時(shí)隨著爬蟲規(guī)模的擴(kuò)大,這一比例更會(huì)逐步提升,惡意爬蟲行為會(huì)產(chǎn)生隱私信息的泄露和傳播、資源的無(wú)序掠奪、企業(yè)間不正當(dāng)競(jìng)爭(zhēng)、知識(shí)產(chǎn)權(quán)及商業(yè)機(jī)密的竊取等違法行為,同時(shí)影響著互聯(lián)網(wǎng)綠色安全的環(huán)境,所以必須及時(shí)通過(guò)法律規(guī)制和行為規(guī)范來(lái)限制這種惡意爬蟲的使用。
圖2 2013-2015 年互聯(lián)網(wǎng)訪問(wèn)行為比例
4.1 設(shè)置robots.txt 文件限制。robots.txt 也叫robots 協(xié)議,是一種存放于網(wǎng)頁(yè)根目錄下的文本文件,用來(lái)告知搜索引擎此站點(diǎn)的哪些內(nèi)容是不可以被獲取的, 可以用來(lái)引導(dǎo)或限制網(wǎng)頁(yè)蜘蛛的爬取行為。但robots 協(xié)議的形成不是人為規(guī)定的,而且需要搜索引擎的配合,并不是每個(gè)搜索引擎的機(jī)器人都遵守該協(xié)議,無(wú)法完全保證網(wǎng)站的隱私安全性,所以僅靠robots 協(xié)議是無(wú)法保證互聯(lián)網(wǎng)安全的。
4.2 限制User Agent 字段進(jìn)行訪問(wèn)過(guò)濾。User Agent 字段可以使服務(wù)器標(biāo)識(shí)出用戶使用的操作系統(tǒng)版本、瀏覽器版本、瀏覽器引擎、CPU類型等用戶信息。爬蟲使用的User Agent 字段與普通用戶使用瀏覽器進(jìn)行訪問(wèn)的字段有所不同, 所以可以通過(guò)設(shè)置User Agent 字段限制對(duì)爬蟲的訪問(wèn)行為進(jìn)行過(guò)濾和識(shí)別, 可有效地限制部分簡(jiǎn)單爬蟲腳本的訪問(wèn)操作。
4.3 基于用戶訪問(wèn)行為進(jìn)行限制。針對(duì)在網(wǎng)頁(yè)請(qǐng)求的User Agent 字段中修改信息偽裝成瀏覽器訪問(wèn)的爬蟲行為, 網(wǎng)站可通過(guò)檢測(cè)用戶行為來(lái)判斷是否為爬蟲。爬蟲腳本的訪問(wèn)相比于普通用戶具有更高的規(guī)律性和高頻性, 例如相同IP 短時(shí)間內(nèi)多次訪問(wèn)同一頁(yè)面等操作。針對(duì)這種行為,網(wǎng)站可基于訪問(wèn)數(shù)據(jù),并通過(guò)應(yīng)用識(shí)別設(shè)備、IPS 的設(shè)置來(lái)處理,較為全面的限制爬蟲訪問(wèn),避免多服務(wù)器管理情況下的疏漏問(wèn)題。
4.4 封禁爬蟲的IP 地址。對(duì)于偽裝成瀏覽器訪問(wèn)的爬蟲,網(wǎng)站可通過(guò)統(tǒng)計(jì)數(shù)據(jù)檢測(cè)訪問(wèn)較為頻繁的IP 地址, 同時(shí)對(duì)其進(jìn)行暫時(shí)的封禁,以限制該類爬蟲行為。
4.5 關(guān)鍵信息進(jìn)行亂碼處理。將網(wǎng)頁(yè)中的關(guān)鍵信息通過(guò)亂碼或圖片形式來(lái)顯示,網(wǎng)頁(yè)可以通過(guò)各種方式將亂碼信息渲染為可正常閱讀的數(shù)據(jù),以便瀏覽者正常訪問(wèn)。
4.6 AJAX動(dòng)態(tài)加載網(wǎng)站內(nèi)容。動(dòng)態(tài)網(wǎng)頁(yè)的數(shù)據(jù)都是由ajax請(qǐng)求得到的, 使用ajax動(dòng)態(tài)加載網(wǎng)站內(nèi)容可加強(qiáng)前后端交互能力,提高網(wǎng)站的運(yùn)行速度和安全性。我們還可以加密所有ajax申請(qǐng)的參數(shù),這使得爬蟲無(wú)法構(gòu)造并模擬ajax請(qǐng)求來(lái)訪問(wèn)網(wǎng)站。
4.7 登陸時(shí)采取圖片或滑動(dòng)等動(dòng)態(tài)驗(yàn)證形式??稍谟脩舻卿洉r(shí)設(shè)置動(dòng)態(tài)驗(yàn)證確保登陸操作是人為的,而不是爬蟲腳本。動(dòng)態(tài)驗(yàn)證的形式也有多種,如傳統(tǒng)輸入式驗(yàn)證碼、圖片驗(yàn)證碼、滑動(dòng)圖塊驗(yàn)證、短信驗(yàn)證、圖片選擇及行為輔助驗(yàn)證、點(diǎn)擊式圖文驗(yàn)證、第三方驗(yàn)證等驗(yàn)證形式的多樣化決定了網(wǎng)站的安全程度。
4.8 對(duì)Cookie 進(jìn)行限制。用戶向訪問(wèn)網(wǎng)站發(fā)送Request 時(shí),數(shù)據(jù)中會(huì)包含特定的Cookie 數(shù)據(jù), 網(wǎng)站將會(huì)通過(guò)對(duì)Cookie 值的驗(yàn)證來(lái)判斷該用戶操作是爬蟲腳本還是真實(shí)的用戶,當(dāng)用戶第二次及第三次打開網(wǎng)頁(yè)訪問(wèn)無(wú)Cookie 數(shù)據(jù)時(shí),則說(shuō)明該操作為爬蟲腳本。
Cookie 與User Agent 限制不同的是,User Agent 中的字段非常容易偽造,而Cookie 的數(shù)據(jù)都是經(jīng)過(guò)哈希處理的字符串,需通過(guò)抓包等手段來(lái)偽造Cookie,難度較大。
5.1 嚴(yán)格恪守網(wǎng)站發(fā)布的Robots 協(xié)議。
5.2 不可發(fā)起會(huì)造成網(wǎng)站服務(wù)器癱瘓的網(wǎng)絡(luò)攻擊行為,不得影響網(wǎng)站的正常運(yùn)營(yíng)。
5.3 抓取數(shù)據(jù)時(shí)應(yīng)防止抓取個(gè)人隱私信息,不能非法獲利。
圖3 針對(duì)反爬策略的研究
5.4 嚴(yán)格遵守《網(wǎng)絡(luò)安全法》中相關(guān)規(guī)定,避免產(chǎn)生不正當(dāng)競(jìng)爭(zhēng)行為和糾紛。
5.5 在爬取和使用信息的過(guò)程中, 應(yīng)避免視頻、音樂(lè)、圖片、文章等具有版權(quán)的數(shù)據(jù),及時(shí)做好內(nèi)容的審查工作, 一旦發(fā)現(xiàn)屬于個(gè)人隱私信息或商業(yè)機(jī)密性質(zhì)的數(shù)據(jù)時(shí), 應(yīng)立刻停止抓取并刪除所有數(shù)據(jù),做好行為規(guī)范。
總而言之,爬蟲這種自動(dòng)化技術(shù)的確為人類互聯(lián)網(wǎng)帶來(lái)了許多好處,但是同樣的,濫用爬蟲技術(shù)也會(huì)有很多壞處,水能載舟亦能覆舟,因此,我們要在法律規(guī)制和自身行為規(guī)范下學(xué)會(huì)正確使用這種技術(shù),才能最大化的發(fā)揮其優(yōu)勢(shì),避免造成對(duì)互聯(lián)網(wǎng)環(huán)境的危害。