摘 要: 以AJAX技術(shù)為代表的Web應(yīng)用新技術(shù)的出現(xiàn),賦予了JavaScript更加豐富的功能。但也導(dǎo)致更多的URL以數(shù)據(jù)形式存在于JavaScript代碼中,給網(wǎng)絡(luò)爬蟲的URL提取帶來了新的挑戰(zhàn)。為了解決這一問題,在此提出了一種基于WebKit的網(wǎng)絡(luò)爬蟲,以WebKit作為爬蟲的前端來解析并執(zhí)行JavaScript。一是實現(xiàn)JavaScript對網(wǎng)頁DOM的修改,從而將存在于此類代碼中的URL轉(zhuǎn)換成HTML形式并以靜態(tài)分析方法來提取;二是定位JavaScript頁面導(dǎo)航的代碼并且劫持輸入導(dǎo)航方法及對象的變量以提取變量中的URL。這充分降低了客戶端腳本給爬蟲帶來的障礙,從而更好地提取網(wǎng)頁中的URL。
關(guān)鍵詞: 網(wǎng)絡(luò)爬蟲; 瀏覽器引擎; WebKit; JavaScript
中圖分類號: TN964?34 文獻標(biāo)識碼: A 文章編號: 1004?373X(2013)18?0062?03
0 引 言
隨著各種形式的互聯(lián)網(wǎng)應(yīng)用不斷出現(xiàn),互聯(lián)網(wǎng)正在顯著改變著人類的生活方式,互聯(lián)網(wǎng)應(yīng)用已經(jīng)成為了一部分人類生活中不可或缺的一部分。互聯(lián)網(wǎng)規(guī)模的不斷擴大,互聯(lián)網(wǎng)上的信息也呈幾何倍數(shù)增長。如何快速準(zhǔn)確地找到所需要的信息就成了一個難題,而網(wǎng)絡(luò)爬蟲正是解決這個問題的關(guān)鍵。在網(wǎng)絡(luò)爬蟲的眾多應(yīng)用場景中,最典型的例子就是搜索引擎。而在備受關(guān)注的Web應(yīng)用安全領(lǐng)域,網(wǎng)絡(luò)爬蟲也是不可或缺的一部分。
網(wǎng)絡(luò)爬蟲是一個按照一定邏輯掃描或者“爬行”網(wǎng)頁的程序或者腳本[1]。工作流程一般是根據(jù)設(shè)定的初始URL(統(tǒng)一資源定位符)從網(wǎng)絡(luò)上獲取相應(yīng)的內(nèi)容,從這些內(nèi)容中抽取出需要的信息以及URL,隨后以新抽取的URL為基礎(chǔ)重復(fù)之前的工作。網(wǎng)絡(luò)爬蟲的目的并不是單純的“爬行”,而是為更高層次的目的所服務(wù)。比如搜索引擎所使用的爬蟲在爬行的過程中會根據(jù)關(guān)鍵字協(xié)助搜索引擎建立索引,而黑盒Web應(yīng)用漏洞掃描工具所使用的爬蟲在工作時會將發(fā)現(xiàn)的Web應(yīng)用入口記錄并提交給漏洞檢測模塊進行檢測。所以網(wǎng)絡(luò)爬蟲的工作效果將直接決定這些工作的效果。
為了解決JavaScript執(zhí)行問題,本文提出了一種基于WebKit的網(wǎng)絡(luò)爬蟲。在網(wǎng)絡(luò)爬蟲中引入瀏覽器引擎,使得網(wǎng)絡(luò)爬蟲可以執(zhí)行JavaScript并對網(wǎng)頁進行渲染,獲取網(wǎng)頁在瀏覽器上呈現(xiàn)給用戶的結(jié)果,從而在之后的分析中提取到更多的URL。
1 WebKit分析
瀏覽器引擎,是瀏覽器的核心部分,也稱瀏覽器內(nèi)核,負責(zé)對網(wǎng)頁語法的解釋(如HTML,JavaScript)并渲染網(wǎng)頁。主流的瀏覽器引擎包括Trident,Gecko,Presto以及WebKit。Trident是微軟Internet Explorer的瀏覽器引擎的名稱,主要使用者有IE和世界之窗瀏覽器。Gecko是由Mozilla基金會開發(fā)的瀏覽器引擎的名字,主要代表是Firefox。Presto是一個由Opera Software開發(fā)的瀏覽器引擎,供Opera 7.0及以上使用。Webkit是一款開源的瀏覽器引擎[9],目前使用WebKit引擎的瀏覽器主要有蘋果Safari、谷歌Chrome、遨游瀏覽器以及360極速瀏覽器。
使用WebKit引擎的瀏覽器都是以速度著稱的瀏覽器,這說明了WebKit相對與其他瀏覽器引擎的最大優(yōu)勢是速度。這正是選擇在網(wǎng)絡(luò)爬蟲中使用WebKit的原因。因為網(wǎng)絡(luò)爬蟲抓取網(wǎng)頁的速度是制約網(wǎng)絡(luò)爬蟲速度的瓶頸。WebKit的核心主要由2個模塊組成:WebCore和JavaScriptCore,其代碼起源于自由軟件社區(qū)KDE的HTML排版引擎KHTML及JavaScript引擎KJS的代碼。這兩個模塊將完成HTML解析、JavaScript解析以及網(wǎng)頁布局和渲染三部分工作。
WebCore主要組成部分如表1所示。
2 方案設(shè)計
網(wǎng)絡(luò)爬蟲總體上分為4個模塊:網(wǎng)頁獲取模塊、網(wǎng)頁渲染模塊、URL抽取模塊以及URL隊列管理模塊。總體方案設(shè)計如圖1所示。網(wǎng)頁獲取模塊的功能是通過網(wǎng)絡(luò)接口向服務(wù)器發(fā)起請求并獲取服務(wù)器的響應(yīng),即獲取URL對應(yīng)文檔的源代碼。網(wǎng)頁渲染模塊的功能是解析源代碼中的HTML和JavaScript,并運行JavaScript代碼對對網(wǎng)頁進行渲染,即獲取瀏覽器呈現(xiàn)給用戶的網(wǎng)頁形式,但是仍然是以HTML的形式存儲的。URL抽取模塊的功能是分析經(jīng)過渲染的HTML代碼,從中抽取出新的URL,并將新的URL放入鏈接隊列中。鏈接抽取模塊分成2個子模塊:HTMLParser和JSParser。HTMLParser通過HTML語法分析和正則表達式提取URL。JSParser則對JavaScript進行進一步的處理。這是由于JavaScript中可能包含引起頁面跳轉(zhuǎn)的語句,比如window對象的open方法,location對象的href屬性和replace方法等。這些語句當(dāng)中包含有URL,但是不會引起網(wǎng)頁DOM結(jié)構(gòu)的變化,所以網(wǎng)頁渲染模塊不能使它們顯現(xiàn)在HTML中,還需要進一步分析JavaScript以提取這些URL。URL隊列管理模塊的功能是管理URL隊列,負責(zé)決定下一個爬行的URL,并決定哪些新發(fā)現(xiàn)的URL需要放入隊列中。
3 運行測試
4 結(jié) 語
本文設(shè)計并實現(xiàn)了一種基于WebKit瀏覽器引擎的網(wǎng)絡(luò)爬蟲,較好地實現(xiàn)了網(wǎng)頁中的JavaScript代碼對網(wǎng)頁的渲染,從而提升了網(wǎng)絡(luò)爬蟲的URL提取能力,可以有效提高搜索引擎和Web應(yīng)用漏洞掃描程序的覆蓋率。目前在處理用戶觸發(fā)的JavaScript代碼(如onclick事件)方面還有所欠缺,這將是下一步的研究目標(biāo)。
參考文獻
[1] Wikipedia. Web crawler [EB/OL]. [2013?05?30]. http://en.wikipedia.org/wiki/Web_crawler.
[2] University of Toronto. HTML and XHTML document type definitions [EB/OL]. [2013?04?23]. http://www.utoronto.ca/webdocs/HTMLdocs/HTML_Spec/html.html.
[3] Wikipedia. Regular expression [EB/OL]. [2013?04?23]. http://en.wikipedia.org/wiki/Regular_expression.
[4] World Wide Web Consortium. Document object model [EB/OL]. [2013?04?23]. http://www.w3.org/DOM.
[5] ALVAREZ M, RAPOSO J, PAN A, et al. DeepBot: a focused crawler for accessing hidden web content [C]// Proceedings of DEECS 2007. New York, USA: ACM, 2007: 18?25.
[6] 彭軻,廖聞劍.基于瀏覽器服務(wù)的網(wǎng)絡(luò)爬蟲[J].硅谷,2009(4): 49?50.
[7] 劉兵.基于JavaScript等多鏈接分析的主題爬蟲設(shè)計實現(xiàn)[J].許昌學(xué)院學(xué)報,2010,29(2):87?90.
[8] 范軒苗,鄭寧,范淵.一種基于AJAX的爬蟲模型的設(shè)計與實現(xiàn) [J].計算機應(yīng)用與軟件,2010,27(1):96?99.
[9] WebKit Open Source Project. The WebKit open source project [EB/OL]. [2013?03?24]. http://www.webkit.org.
[10] WebKit Open Source Project. JavaScriptCore [EB/OL]. [2013?03?24]. http://trac.webkit.org/wiki/JavaScriptCore.
[11] w3af. w3af?open source web application security scanner [EB/OL]. [2013?04?16]. http://www.w3af.org.
[12] GIRARDI C, RICCA F, TONELLA P. Web crawlers compared [J]. International Journal of Web Information Systems, 2006, 2(2): 85?94.