九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
一文讀懂爬蟲與反爬蟲技術(shù)

互聯(lián)網(wǎng)的快速發(fā)展離不開爬蟲的貢獻,百度爬蟲、搜狗爬蟲、360爬蟲、UC爬蟲...各式各樣的爬蟲背后同時也隱藏著一些阻礙互聯(lián)網(wǎng)發(fā)展的爬蟲...什么是爬蟲?爬蟲是如何爬取到數(shù)據(jù)的?不想讓爬蟲爬取我的網(wǎng)站,該怎么辦?本文將對這些問題做一個深入淺出的介紹。

作者:馬行健

單位:中國移動智慧家庭運營中心

1、爬蟲與反爬蟲的概念

互聯(lián)網(wǎng)站點的流量一部分由人類正常訪問行為產(chǎn)生,而高達30%-60%的流量則是由網(wǎng)絡(luò)爬蟲產(chǎn)生的,其中一部分包含友好網(wǎng)絡(luò)爬蟲,如搜索引擎的爬蟲、廣告程序、第三方合作伙伴程序、Robots協(xié)議友好程序等;而并非所有的網(wǎng)絡(luò)爬蟲都是友好的,爬蟲流量中仍有約20%~30%的流量來自惡意網(wǎng)絡(luò)爬蟲。從網(wǎng)站業(yè)務(wù)安全的角度,例如文學(xué)博客、招聘網(wǎng)站、論壇網(wǎng)站、電商等網(wǎng)站均以文本為商品作為盈利點,而惡意爬蟲則可以通過爬取核心文本從中謀取利益;競品公司還可以通過利用惡意爬蟲爬取商品價格和詳情或者注冊用戶信息后進行同類產(chǎn)品線和價格的研究,通過推出過低價格等手段來破壞市場秩序;對于帶寬有限的中小型網(wǎng)站,高頻、大規(guī)模的惡意爬蟲可能會降低網(wǎng)頁加載速度,影響真實用戶的訪問體驗,增加網(wǎng)站帶寬負擔(dān)。

由于惡意爬蟲帶來的不利影響,因此出現(xiàn)了爬蟲防御技術(shù)-即反爬蟲技術(shù),反爬蟲技術(shù)可分為被動防御機制與主動防御機制。

? 被動防御機制:主要是根據(jù)檢測結(jié)果展開的,如利用HTTP請求頭User-Agent來判斷、攔截爬蟲請求,或?qū)υL問頻率過高的IP地址進行封禁。被動防御存在部分缺陷:被動防御檢測流程和機制單一,無法應(yīng)對復(fù)雜多變的惡意爬蟲,檢測誤判率高,容易造成誤封、漏封。

? 主動防御機制:是主流的爬蟲防御發(fā)展方向,通過對網(wǎng)頁底層代碼的持續(xù)動態(tài)變換,增加服務(wù)器行為的“不可預(yù)測性”,大幅提升攻擊難度,從而實現(xiàn)了從客戶端到服務(wù)器端的全方位“主動防護”。

2、網(wǎng)絡(luò)爬蟲技術(shù)基本工作流程和基礎(chǔ)架構(gòu)

與正常人類訪問者使用瀏覽器訪問網(wǎng)頁的工作原理相同,網(wǎng)絡(luò)爬蟲也是根據(jù)HTTP協(xié)議來獲取網(wǎng)頁信息的,其流程主要包括如下步驟:

1)對待抓取的URL進行域名解析;

2)根據(jù)HTTP協(xié)議,發(fā)送HTTP請求來獲取網(wǎng)頁內(nèi)容。

網(wǎng)絡(luò)爬蟲的基礎(chǔ)架構(gòu)如圖1所示。具體而言,網(wǎng)絡(luò)爬蟲首先通過種子URL延伸得到待抓取URL隊列,接著網(wǎng)絡(luò)爬蟲從待抓取URL列表中逐個進行讀取,讀取URL的過程中,會將URL進行DNS解析,得到網(wǎng)站服務(wù)器的IP地址以及相對路徑,接著再把這個地址交給網(wǎng)頁下載器(負責(zé)下載網(wǎng)頁內(nèi)容的一個模塊)。

對于下載到本地的網(wǎng)頁,即網(wǎng)頁的源代碼,一方面要將這個網(wǎng)頁存儲到網(wǎng)頁庫中,另一方面要從下載的網(wǎng)頁中再次提取URL地址,新提取出來的URL地址會先在已抓取的URL列表中進行比對,檢查該網(wǎng)頁是否已被抓取,如果網(wǎng)頁沒有被抓取過,就將新的URL地址放入到待抓取的URL列表的末尾,等待被抓取,直至待抓取隊列為空的時候,網(wǎng)絡(luò)爬蟲就算完成了抓取的全過程,最后對網(wǎng)頁庫中已下載的網(wǎng)頁進行分析與索引后得到收錄結(jié)果。其中所謂種子URL即為最開始選定的URL地址,網(wǎng)站首頁、頻道頁等豐富性內(nèi)容較多的頁面往往會被作為種子URL。

圖1 網(wǎng)絡(luò)爬蟲的基礎(chǔ)架構(gòu)

3、基于自定義cookie的爬蟲檢測策略

目前的爬蟲檢測技術(shù)主要分為以下四類:一是基于日志分析的檢測技術(shù),二是基于訪問模式的檢測技術(shù),三是基于訪問行為的檢測技術(shù),四是基于圖靈測試的檢測技術(shù)。

  • 基于日志分析的檢測技術(shù)是通過對比用戶和爬蟲名單庫的爬蟲的User-Agent關(guān)鍵詞、IP地址等信息來檢測爬蟲。
  • 基于訪問模式的檢測技術(shù)通過尋找人類用戶與爬蟲的不同流量特征,如查詢數(shù)量、時間間隔模式、搜索操作頻率等來檢測爬蟲。
  • 基于訪問行為的檢測技術(shù)大多使用機器學(xué)習(xí)模型如神經(jīng)網(wǎng)絡(luò)、決策樹等通過訪問者的點擊時間、圖片加載情況以及訪問停留時長等有利特征來對訪問進行分類,從而判斷訪問是否來自爬蟲。
  • 基于圖靈測試的檢測技術(shù)通過讓訪問者回答一些問題來分析其是否為爬蟲,常見的圖靈測試系統(tǒng)有驗證碼測試。

除了上述四類方法,蜜罐技術(shù)(隱藏鏈接)也常被使用,通過在網(wǎng)頁中隱藏一些人眼不能發(fā)現(xiàn)但爬蟲訪問能夠訪問但鏈接來識別爬蟲。

基于自定義cookie的檢測技術(shù)是一種基于日志分析的主動抵御爬蟲的策略,該策略是通過在網(wǎng)站的接口中增加了一些加密參數(shù)來實現(xiàn)的,瀏覽器通過執(zhí)行返回的JS代碼得到具有時效性以及機密性的結(jié)果,并將結(jié)果添加到cookie中,再次發(fā)起請求時攜帶,正常人類訪問者和惡意爬蟲的訪問過程如圖2所示。

圖2 正常人類訪問者和惡意爬蟲的訪問流程圖

具體而言,向客戶端返回JS代碼,并通過客戶端執(zhí)行JS代碼的結(jié)果來主動抵御爬蟲。cookie的生成過程可以融合客戶端瀏覽器的特性,該特性檢測只有在真實的瀏覽器和真實用戶訪問行為的情況下才能完成,而無法在一些瀏覽器內(nèi)核模擬器上或者一些偽造了請求頭User-Agent的情況下得到。比如,服務(wù)器返回的檢測腳本用于檢測瀏覽器是否存在某個bug,針對實際的瀏覽器而言,該瀏覽器本身是存在該bug的,但爬蟲程序中偽造的瀏覽器運行該檢測腳本生成對應(yīng)cookie時,則不會得到正確的cookie,因此可斷定訪問用戶為爬蟲。再如,cookie生成腳本中融合瀏覽器是否具有網(wǎng)頁翻譯的功能,針對實際的瀏覽器而言,該瀏覽器本身是具有網(wǎng)頁翻譯功能的,但客戶端的瀏覽器運行該檢測腳本時,執(zhí)行網(wǎng)頁翻譯功能失敗,因此也可斷定訪問用戶為爬蟲。

針對以自定義cookie為基礎(chǔ)的爬蟲檢測技術(shù),瀏覽器可以通過執(zhí)行JS代碼獲取到后端認可的結(jié)果,同理,攻擊者也可以通過攔截JS代碼并對其分析,從而達到同樣的目的。因此返回的JS代碼需要具備反攔截以及不易逆向的特點,此時將JavaScript-obfuscator混淆技術(shù)結(jié)合到基于自定義cookie的檢測技術(shù)中,保證代碼安全。此處的JavaScript-obfuscator混淆技術(shù)通常包含JS代碼壓縮、混淆與加密技術(shù)。

4、JS代碼壓縮、混淆與加密

JS代碼壓縮是去除JS代碼中的不必要的空格、換行等內(nèi)容,使源碼壓縮為幾行內(nèi)容,降低代碼可讀性,同時也可以提高網(wǎng)站的加載速度。

JS代碼混淆是一種較為理想、實用的代碼保護方案,通過使用變量混淆、字符串混淆、反格式化、控制流平坦化、無用代碼注入、對象鍵名替換、禁用控制臺輸出、調(diào)試保護、域名鎖定等手段,在不影響代碼原有功能的基礎(chǔ)上,使代碼變得難以閱讀和分析,達到最終保護的目的。JS代碼加密是通過某種手段將JS代碼進行加密,轉(zhuǎn)成人無法閱讀或者解析的代碼或?qū)⒋a完全抽象化加密。

常見的JS代碼加密技術(shù)有JSfuck、AAEncode、JJEncode、eval加密。JSfuck、AAEncode、JJEncode加密技術(shù)利用各自的符號庫對JS代碼進行編碼,eval加密往往也都是以eval(p,a,c,k,e,r)或者是eval(function(p,a,c,k,e,d)作為代碼開頭。以上四種加密方式加密特征明顯,易于解碼,利用瀏覽器的開發(fā)者工具均可以完全還原,與此同時eval加密技術(shù)壓棧很嚴重,可能出現(xiàn)內(nèi)存溢出情況,所以只適合核心功能加密。特別的,JJEncode有瀏覽器依賴,代碼不能在某種瀏覽器上運行。另外還有更強大的加密技術(shù),可以直接將JS代碼用C/C++實現(xiàn),瀏覽器調(diào)用其編譯后形成的文件來執(zhí)行相應(yīng)的功能,如Emscripten、WebAssembly。

變量混淆是將帶有含義的變量名、方法名、常量名隨機變?yōu)闊o意義的類亂碼字符串,降低代碼可讀性,如轉(zhuǎn)成單個字符或十六進制字符串。

字符串混淆是將字符串陣列化集中放置、并可進行MD5或Base64加密存儲,使代碼中不出現(xiàn)明文字符串,這樣可以避免使用全局搜索字符串的方式定位到入口點。

JS代碼格式化的原因是由于保存到本地的JS文件被壓縮且不利于觀察,格式化即美化,反格式化即如果對JS代碼進行格式化,則無法執(zhí)行,導(dǎo)致瀏覽器假死。控制流平坦化通過打亂函數(shù)原有代碼執(zhí)行流程及函數(shù)調(diào)用關(guān)系,在邏輯處理塊前統(tǒng)一加上驅(qū)動邏輯塊,使代碼邏變得混亂無序,簡單來講就是將代碼塊之間的關(guān)系打斷,由一個分發(fā)器來控制代碼塊的跳轉(zhuǎn),如圖3和圖4所示。

圖3 混淆前的代碼流程圖

圖4 混淆后的代碼流程圖

無用代碼注入是隨機在代碼中插入不會被執(zhí)行到的無用代碼,進一步使代碼看起來更加混亂。禁用控制臺輸出是通過置空控制臺方法(console.log, console.debug, console.info, console.error, console.exception, console.trace, console.warn)的方式實現(xiàn)的。調(diào)試保護是基于調(diào)試器特性,對當(dāng)前運行環(huán)境進行檢驗,加入一些強制調(diào)試debugger語句,使其在調(diào)試模式下難以順利執(zhí)行JS代碼。域名鎖定是使JS代碼只能在指定域名下執(zhí)行。

5、JavaScript-obfuscator混淆

在前端開發(fā)中,作為JS混淆主流的實現(xiàn),JavaScript-obfuscator庫和terser庫提供了一些代碼混淆功能,也都有對應(yīng)的Webpack 和Rollup打包工具的插件,從而方便實現(xiàn)頁面的混淆,最終輸出壓縮和混淆后的JS代碼,使得JS代碼可讀性大大降低,JavaScript-obfuscator的混淆選項如圖5所示。

圖5 JavaScript-obfuscator混淆的混淆選項

JavaScript-obfuscator混淆有眾多的參數(shù),但JavaScript-obfuscator混淆后代碼的抽象語法樹依次包含以下結(jié)構(gòu):大數(shù)組-->數(shù)組移位-->解密函數(shù)-->控制流平坦化后的核心代碼-->無限debugger自執(zhí)行函數(shù)+死代碼注入。整體ob的強度幾乎完全取決于這四段的代碼強度,其中包含加密前的邏輯。

常用混淆工具有YUI Compressor、Google Closure Compiler、UglifyJS、JScrambler以及JavaScript-obfuscator系工具(obfuscator.io、soJSon v5.0 v6.0、JShaman)。

6、總結(jié)

爬蟲貢獻了互聯(lián)網(wǎng)50%的流量,它對于互聯(lián)網(wǎng)的繁榮功不可沒,但該技術(shù)同時也因“用途”而充滿爭議,爬蟲與反爬蟲一直處于互相博弈的狀態(tài)。此消彼長,在這一過程中反爬蟲漸漸發(fā)展為具備智能交互、數(shù)據(jù)采集、實時計算、模型分析以及決策判斷等能力綜合性安全系統(tǒng),而不再是一個簡易工具。相信隨著監(jiān)管越來越嚴格,爬蟲技術(shù)的使用邊界也將更加明晰,互聯(lián)網(wǎng)環(huán)境也將越來越清澈。

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一篇文章了解爬蟲技術(shù)現(xiàn)狀
Python爬蟲破解有道翻譯
python學(xué)習(xí)之python爬蟲原理
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服