|
兩篇文章下肚,各位看官感覺如何。避免新同學(xué)不知道之前的文章:
爬蟲被封IP了怎么辦-反爬與反反爬的奇技淫巧
爬蟲中的驗(yàn)證碼識(shí)別-反爬與反反爬的奇技淫巧
前兩篇文章算是講了最常規(guī)的兩種反爬,本篇文章理論上應(yīng)該說說登錄,因?yàn)榛旧线@三個(gè)反爬套路結(jié)束之后,其他都是小眾了。不過登錄這個(gè)東西真的沒太多可講的,因?yàn)閲?yán)格來說登錄并不是反爬,只是一種保護(hù)手段,后面有時(shí)間簡(jiǎn)單說說吧。
今天咱們要聊的這位主角跟登錄倒也有點(diǎn)關(guān)系。先來簡(jiǎn)單摘抄一段Cookie的描述:
Cookie,有時(shí)也用其復(fù)數(shù)形式Cookies,指某些網(wǎng)站為了辨別用戶身份、進(jìn)行 session 跟蹤而儲(chǔ)存在用戶本地終端上的數(shù)據(jù)(通常經(jīng)過加密)。定義于 RFC2109 和 2965 中的都已廢棄,最新取代的規(guī)范是 RFC6265
那簡(jiǎn)單來說Cookie就是一個(gè)瀏覽器上的緩存或者叫小數(shù)據(jù)庫也行,在沒有LocalStorage之前,我們前端工程師就只能用這破玩意當(dāng)數(shù)據(jù)庫使。
那現(xiàn)在問題來了,這玩意對(duì)反爬到底有什么幫助呢。
好了,我的經(jīng)典套路又要來了,先假裝介紹反爬技巧:
一.為什么Cookie能夠做反爬?
這個(gè)問題遠(yuǎn)比前兩篇文章里的要難回答,因?yàn)镮P和驗(yàn)證碼都是實(shí)打?qū)嵉脑驅(qū)е氯思沂欠磁赖纳仙鲜帧5荂ookie則不然,Cookie上的反爬則更多的是純粹人與人之間的對(duì)抗,Cookie由于是存儲(chǔ)在客戶端上導(dǎo)致其偽造成本極低,那為什么還有那么多的網(wǎng)頁采用Cookie來做反爬呢?(當(dāng)然很多爬蟲菜鳥工程師可能都判斷不出來是用Cookie在做反爬),是因?yàn)槟壳癑avascript混淆的手段也是花樣百出,任你是Javascript的高手高手高高手,我也能用惡心的招數(shù)(比如把所有代碼拆成ASCII碼數(shù)組,再動(dòng)態(tài)拼合后eval)來懟得你不想吃飯。這也成就了Cookie反爬成為除IP和驗(yàn)證碼這兩類可見的反爬手段之后最重要的一種補(bǔ)充。當(dāng)然具體Javascript對(duì)抗相關(guān)的內(nèi)容我們下一篇文章再講。
二.怎么做好Cookie反爬?
首先咱們得知道,常見的Cookie設(shè)置方式有兩種,一種在后端設(shè)置,通過Response的Header傳輸?shù)角岸藶g覽器中,如下圖:
另一種則更加隱蔽,通過前端調(diào)用document.cookie來設(shè)置,對(duì)于反爬效果來說,第二種顯然比第一種效果來的好的多,起碼能讓反反爬工程師少陪老婆一個(gè)星期,是不是想起來都覺得很過癮呢。當(dāng)然直接調(diào)用document.cookie來設(shè)置基本是沒什么效果的,一定要配合上Javascript的混淆才能熬出一鍋反爬的好湯來。至于怎么混淆,我們也留到下一篇文章再講。
三.寫爬蟲時(shí)發(fā)現(xiàn)Cookie很復(fù)雜該怎么分析?
我們公司有專門做爬蟲的同事一見到復(fù)雜的Cookie就想哭,Cookie確實(shí)屬于反反爬中相當(dāng)難纏的對(duì)手,應(yīng)該說跟Request中有一個(gè)摸不著頭腦的參數(shù)值可以并駕齊驅(qū)。那我們遇到這種Cookie應(yīng)該如何沉著應(yīng)對(duì)呢?下面我就給大家把解題思路講一講,考試必考啊。
首先一定準(zhǔn)備好Chrome,老師其他工具用的少,就不展開了。
1. 先刪掉Cookie看正不正常的
第一步也是最重要的一步,千萬記得先把Cookie都刪掉請(qǐng)求一次,如果沒問題,萬事大吉。這里注意對(duì)于Cookie來說一定要把環(huán)境處理好,因此測(cè)試之前一定記得點(diǎn)開『打開新的隱身窗口』的選項(xiàng)。每次測(cè)試完了,打開控制界面,清空Cookie再做下一次測(cè)試。
2. 再找Response中的Cookie
如果不行,咱們就開始找這些Cookie是怎么來的,首先不少的Cookie都是Http Reponse里返回的,那么清理掉Cookie,刷新頁面,點(diǎn)開network的標(biāo)簽頁,一個(gè)一個(gè)請(qǐng)求點(diǎn)下去,很快就會(huì)發(fā)現(xiàn)是哪個(gè)請(qǐng)求返回的,具體如下圖所示:
根據(jù)我們多年做爬蟲的經(jīng)驗(yàn),先訪問一下首頁拿Response的Cookie是一個(gè)成功率很高的反反爬途徑。
3. 找Javascript的關(guān)鍵字
如果還沒找到,咱們就進(jìn)行下一步:找到Cookie中比較特別的詞(至于什么是特別的詞,需要大家用正常人的智商去判斷)。用這個(gè)詞去主要的Javascript文件中搜索。一般來說會(huì)找到文件中具體是哪一句設(shè)置的,如果這個(gè)邏輯看著很復(fù)雜,可以在這一句打斷點(diǎn)調(diào)試來判斷這個(gè)Cookie到底如何生成的。
4. 終極方案Break-on-Access
還是找不到的話,那證明開發(fā)這個(gè)網(wǎng)站的工程師是一個(gè)反爬的好手,那我們只能祭上我們的終極殺器:Chrome Snippets-paulirish/break-on-access
關(guān)于這個(gè)Chrome Snippets怎么使用,大家直接參考這個(gè)這個(gè)Github的鏈接,解釋的挺清楚。有了這個(gè)工具,我們調(diào)用一下:
breakOn(document, 'cookie');
就可以在任何語句修改Cookie的時(shí)候,進(jìn)入斷點(diǎn)。再通過單點(diǎn)調(diào)試,逐步揭開反爬工程師險(xiǎn)惡的面紗了。
至于如何單點(diǎn)調(diào)試,老師就不去做痛苦的回憶了,同學(xué)們自己去體會(huì)把。
——————————————最后再說兩句————————————————
其實(shí)Cookie只是整個(gè)Javascript反爬中的一部分,至于為什么單獨(dú)寫一篇,確實(shí)是Cookie的反爬也有一定自己的特點(diǎn),跟純粹的Javascript反爬有一些區(qū)別,另外LocalStorage也有一些使用技巧,如百度統(tǒng)計(jì)會(huì)在可以存LocalStorage的時(shí)候,存儲(chǔ)信息來判斷是不是老用戶等等。不過因?yàn)榇蠖嗳瞬辉诜磁乐惺褂?,所以我們就不展開聊了。
下一篇我們就要進(jìn)入可能整個(gè)系列最重要一篇文章-Javascript反爬加密與逆向破解,如果前三篇只是介紹兵器,那么下一篇?jiǎng)t是真正的內(nèi)功心法了。
|