女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

網(wǎng)絡(luò)爬蟲技術(shù)的定義與反爬蟲技巧解讀

馬哥Linux運(yùn)維 ? 2017-12-05 16:47 ? 次閱讀

Web是一個(gè)開放的平臺(tái),這也奠定了Web從90年代初誕生直至今日將近30年來蓬勃的發(fā)展。然而,正所謂成也蕭何敗也蕭何,開放的特型、搜索引擎以及簡(jiǎn)單易學(xué)的HTML、CSS技術(shù)使得Web成為了互聯(lián)網(wǎng)領(lǐng)域里最為流行和成熟的信息傳播媒介;但如今作為商業(yè)化軟件,Web這個(gè)平臺(tái)上的內(nèi)容信息的版權(quán)卻毫無保證,因?yàn)橄啾溶浖蛻舳硕裕愕木W(wǎng)頁中的內(nèi)容可以被很低成本、很低的技術(shù)門檻實(shí)現(xiàn)出的一些抓取程序獲取到,這也就是這一系列文章將要探討的話題——網(wǎng)絡(luò)爬蟲。

有很多人認(rèn)為Web應(yīng)當(dāng)始終遵循開放的精神,呈現(xiàn)在頁面中的信息應(yīng)當(dāng)毫無保留地分享給整個(gè)互聯(lián)網(wǎng)。然而我認(rèn)為,在IT行業(yè)發(fā)展至今天,Web已經(jīng)不再是當(dāng)年那個(gè)和PDF一爭(zhēng)高下的所謂“超文本”信息載體了,它已經(jīng)是以一種輕量級(jí)客戶端軟件的意識(shí)形態(tài)的存在了。而商業(yè)軟件發(fā)展到今天,Web也不得不面對(duì)知識(shí)產(chǎn)權(quán)保護(hù)的問題,試想如果原創(chuàng)的高質(zhì)量內(nèi)容得不到保護(hù),抄襲和盜版橫行網(wǎng)絡(luò)世界,這其實(shí)對(duì)Web生態(tài)的良性發(fā)展是不利的,也很難鼓勵(lì)更多的優(yōu)質(zhì)原創(chuàng)內(nèi)容的生產(chǎn)。

未授權(quán)的爬蟲抓取程序是危害Web原創(chuàng)內(nèi)容生態(tài)的一大元兇,因此要保護(hù)網(wǎng)站的內(nèi)容,首先就要考慮如何反爬蟲。

從爬蟲的攻防角度來講

最簡(jiǎn)單的爬蟲,是幾乎所有服務(wù)端、客戶端編程語言都支持的http請(qǐng)求,只要向目標(biāo)頁面的url發(fā)起一個(gè)http get請(qǐng)求,即可獲得到瀏覽器加載這個(gè)頁面時(shí)的完整html文檔,這被我們稱之為“同步頁”。

作為防守的一方,服務(wù)端可以根據(jù)http請(qǐng)求頭中的User-Agent來檢查客戶端是否是一個(gè)合法的瀏覽器程序,亦或是一個(gè)腳本編寫的抓取程序,從而決定是否將真實(shí)的頁面信息內(nèi)容下發(fā)給你。

這當(dāng)然是最小兒科的防御手段,爬蟲作為進(jìn)攻的一方,完全可以偽造User-Agent字段,甚至,只要你愿意,http的get方法里, request header的 Referrer 、 Cookie 等等所有字段爬蟲都可以輕而易舉的偽造。

此時(shí)服務(wù)端可以利用瀏覽器http頭指紋,根據(jù)你聲明的自己的瀏覽器廠商和版本(來自 User-Agent ),來鑒別你的http header中的各個(gè)字段是否符合該瀏覽器的特征,如不符合則作為爬蟲程序?qū)Υ_@個(gè)技術(shù)有一個(gè)典型的應(yīng)用,就是PhantomJS1.x版本中,由于其底層調(diào)用了Qt框架的網(wǎng)絡(luò)庫,因此http頭里有明顯的Qt框架網(wǎng)絡(luò)請(qǐng)求的特征,可以被服務(wù)端直接識(shí)別并攔截。

除此之外,還有一種更加變態(tài)的服務(wù)端爬蟲檢測(cè)機(jī)制,就是對(duì)所有訪問頁面的http請(qǐng)求,在 http response 中種下一個(gè) cookie token ,然后在這個(gè)頁面內(nèi)異步執(zhí)行的一些ajax接口里去校驗(yàn)來訪請(qǐng)求是否含有cookie token,將token回傳回來則表明這是一個(gè)合法的瀏覽器來訪,否則說明剛剛被下發(fā)了那個(gè)token的用戶訪問了頁面html卻沒有訪問html內(nèi)執(zhí)行js后調(diào)用的ajax請(qǐng)求,很有可能是一個(gè)爬蟲程序。

如果你不攜帶token直接訪問一個(gè)接口,這也就意味著你沒請(qǐng)求過html頁面直接向本應(yīng)由頁面內(nèi)ajax訪問的接口發(fā)起了網(wǎng)絡(luò)請(qǐng)求,這也顯然證明了你是一個(gè)可疑的爬蟲。知名電商網(wǎng)站amazon就是采用的這種防御策略。

以上則是基于服務(wù)端校驗(yàn)爬蟲程序,可以玩出的一些套路手段。

基于客戶端js運(yùn)行時(shí)的檢測(cè)

現(xiàn)代瀏覽器賦予了JavaScript強(qiáng)大的能力,因此我們可以把頁面的所有核心內(nèi)容都做成js異步請(qǐng)求 ajax 獲取數(shù)據(jù)后渲染在頁面中的,這顯然提高了爬蟲抓取內(nèi)容的門檻。依靠這種方式,我們把對(duì)抓取與反抓取的對(duì)抗戰(zhàn)場(chǎng)從服務(wù)端轉(zhuǎn)移到了客戶端瀏覽器中的js運(yùn)行時(shí),接下來說一說結(jié)合客戶端js運(yùn)行時(shí)的爬蟲抓取技術(shù)。

剛剛談到的各種服務(wù)端校驗(yàn),對(duì)于普通的python、java語言編寫的http抓取程序而言,具有一定的技術(shù)門檻,畢竟一個(gè)web應(yīng)用對(duì)于未授權(quán)抓取者而言是黑盒的,很多東西需要一點(diǎn)一點(diǎn)去嘗試,而花費(fèi)大量人力物力開發(fā)好的一套抓取程序,web站作為防守一方只要輕易調(diào)整一些策略,攻擊者就需要再次花費(fèi)同等的時(shí)間去修改爬蟲抓取邏輯。

此時(shí)就需要使用headless browser了,這是什么技術(shù)呢?其實(shí)說白了就是,讓程序可以操作瀏覽器去訪問網(wǎng)頁,這樣編寫爬蟲的人可以通過調(diào)用瀏覽器暴露出來給程序調(diào)用的api去實(shí)現(xiàn)復(fù)雜的抓取業(yè)務(wù)邏輯。

其實(shí)近年來這已經(jīng)不算是什么新鮮的技術(shù)了,從前有基于webkit內(nèi)核的PhantomJS,基于Firefox瀏覽器內(nèi)核的SlimerJS,甚至基于IE內(nèi)核的trifleJS,有興趣可以看看這里和這里 是兩個(gè)headless browser的收集列表。

這些headless browser程序?qū)崿F(xiàn)的原理其實(shí)是把開源的一些瀏覽器內(nèi)核C++代碼加以改造和封裝,實(shí)現(xiàn)一個(gè)簡(jiǎn)易的無GUI界面渲染的browser程序。但這些項(xiàng)目普遍存在的問題是,由于他們的代碼基于fork官方webkit等內(nèi)核的某一個(gè)版本的主干代碼,因此無法跟進(jìn)一些最新的css屬性和js語法,并且存在一些兼容性的問題,不如真正的release版GUI瀏覽器。

這其中最為成熟、使用率最高的應(yīng)該當(dāng)屬PhantonJS了,對(duì)這種爬蟲的識(shí)別我之前曾寫過一篇博客,這里不再贅述。PhantomJS存在諸多問題,因?yàn)槭菃芜M(jìn)程模型,沒有必要的沙箱保護(hù),瀏覽器內(nèi)核的安全性較差。

如今Google Chrome團(tuán)隊(duì)在chrome 59 release版本中開放了headless mode api,并開源了一個(gè)基于Node.js調(diào)用的headless chromium dirver庫,我也為這個(gè)庫貢獻(xiàn)了一個(gè)centos環(huán)境的部署依賴安裝列表。

headless chrome可謂是headless browser中獨(dú)樹一幟的大殺器,由于其自身就是一個(gè)chrome瀏覽器,因此支持各種新的css渲染特性和js運(yùn)行時(shí)語法。

基于這樣的手段,爬蟲作為進(jìn)攻的一方可以繞過幾乎所有服務(wù)端校驗(yàn)邏輯,但是這些爬蟲在客戶端的js運(yùn)行時(shí)中依然存在著一些破綻,諸如:

基于plugin對(duì)象的檢查

基于language的檢查

基于webgl的檢查

基于瀏覽器hairline特性的檢查

基于錯(cuò)誤img src屬性生成的img對(duì)象的檢查

基于以上的一些瀏覽器特性的判斷,基本可以通殺市面上大多數(shù)headless browser程序。在這一點(diǎn)上,實(shí)際上是將網(wǎng)頁抓取的門檻提高,要求編寫爬蟲程序的開發(fā)者不得不修改瀏覽器內(nèi)核的C++代碼,重新編譯一個(gè)瀏覽器,并且,以上幾點(diǎn)特征是對(duì)瀏覽器內(nèi)核的改動(dòng)其實(shí)并不小。

更進(jìn)一步,我們還可以基于瀏覽器的UserAgent字段描述的瀏覽器品牌、版本型號(hào)信息,對(duì)js運(yùn)行時(shí)、DOM和BOM的各個(gè)原生對(duì)象的屬性及方法進(jìn)行檢驗(yàn),觀察其特征是否符合該版本的瀏覽器所應(yīng)具備的特征。

這種方式被稱為瀏覽器指紋檢查技術(shù),依托于大型web站對(duì)各型號(hào)瀏覽器api信息的收集。而作為編寫爬蟲程序的進(jìn)攻一方,則可以在headless browser運(yùn)行時(shí)里預(yù)注入一些js邏輯,偽造瀏覽器的特征。

另外,在研究瀏覽器端利用js api進(jìn)行robots browser detect時(shí),我們發(fā)現(xiàn)了一個(gè)有趣的小技巧,你可以把一個(gè)預(yù)注入的js函數(shù),偽裝成一個(gè)native function,來看看下面代碼:

爬蟲進(jìn)攻方可能會(huì)預(yù)注入一些js方法,把原生的一些api外面包裝一層proxy function作為hook,然后再用這個(gè)假的js api去覆蓋原生api。如果防御者在對(duì)此做檢查判斷時(shí)是基于把函數(shù)toString之后對(duì)[native code]的檢查,那么就會(huì)被繞過。所以需要更嚴(yán)格的檢查,因?yàn)閎ind(null)偽造的方法,在toString之后是不帶函數(shù)名的。

反爬蟲的銀彈

目前的反抓取、機(jī)器人檢查手段,最可靠的還是驗(yàn)證碼技術(shù)。但驗(yàn)證碼并不意味著一定要強(qiáng)迫用戶輸入一連串字母數(shù)字,也有很多基于用戶鼠標(biāo)、觸屏(移動(dòng)端)等行為的行為驗(yàn)證技術(shù),這其中最為成熟的當(dāng)屬Google reCAPTCHA。

基于以上諸多對(duì)用戶與爬蟲的識(shí)別區(qū)分技術(shù),網(wǎng)站的防御方最終要做的是封禁ip地址或是對(duì)這個(gè)ip的來訪用戶施以高強(qiáng)度的驗(yàn)證碼策略。這樣一來,進(jìn)攻方不得不購買ip代理池來抓取網(wǎng)站信息內(nèi)容,否則單個(gè)ip地址很容易被封導(dǎo)致無法抓取。抓取與反抓取的門檻被提高到了ip代理池經(jīng)濟(jì)費(fèi)用的層面。

機(jī)器人協(xié)議

除此之外,在爬蟲抓取技術(shù)領(lǐng)域還有一個(gè)“白道”的手段,叫做robots協(xié)議。你可以在一個(gè)網(wǎng)站的根目錄下訪問/robots.txt,比如讓我們一起來看看github的機(jī)器人協(xié)議,Allow和Disallow聲明了對(duì)各個(gè)UA爬蟲的抓取授權(quán)。

不過,這只是一個(gè)君子協(xié)議,雖具有法律效益,但只能夠限制那些商業(yè)搜索引擎的蜘蛛程序,你無法對(duì)那些“野爬愛好者”加以限制。

寫在最后

對(duì)網(wǎng)頁內(nèi)容的抓取與反制,注定是一個(gè)魔高一尺道高一丈的貓鼠游戲,你永遠(yuǎn)不可能以某一種技術(shù)徹底封死爬蟲程序的路,你能做的只是提高攻擊者的抓取成本,并對(duì)于未授權(quán)的抓取行為做到較為精確的獲悉。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • CSS
    CSS
    +關(guān)注

    關(guān)注

    0

    文章

    110

    瀏覽量

    14731
  • 網(wǎng)絡(luò)爬蟲
    +關(guān)注

    關(guān)注

    1

    文章

    52

    瀏覽量

    8881

原文標(biāo)題:爬蟲技術(shù)的門道,這篇文章總結(jié)的最全

文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    識(shí)別網(wǎng)絡(luò)爬蟲的策略分析

    爬蟲(crawler)也可以被稱為spider和robot,通常是指對(duì)目標(biāo)網(wǎng)站進(jìn)行自動(dòng)化瀏覽的腳本或者程序,包括使用requests庫編寫腳本等。隨著互聯(lián)網(wǎng)的不斷發(fā)展,網(wǎng)絡(luò)爬蟲愈發(fā)常見,并占用了大量
    的頭像 發(fā)表于 09-14 09:08 ?1736次閱讀
    識(shí)別<b class='flag-5'>網(wǎng)絡(luò)</b><b class='flag-5'>爬蟲</b>的策略分析

    Python數(shù)據(jù)爬蟲學(xué)習(xí)內(nèi)容

    。3.掌握一些常用的爬蟲技巧。使用代理IP池、抓包、驗(yàn)證碼的OCR處理等處理方式即可以解決大部分網(wǎng)站的爬蟲策略。4.了解分布式存儲(chǔ)分布式這個(gè)東西,聽起來很恐怖,但其實(shí)就是利用多線程
    發(fā)表于 05-09 17:25

    patyon爬蟲技術(shù)PDF課件分享

    patyon爬蟲技術(shù)PDF課件分享
    發(fā)表于 02-14 16:33

    爬蟲瀏覽器全解

    Python_爬蟲解決辦法
    發(fā)表于 07-29 16:00

    應(yīng)對(duì)爬蟲的策略

    被機(jī)器人肆意地濫用,網(wǎng)站的安全和流量費(fèi)用就會(huì)面臨嚴(yán)重威脅,因此很多網(wǎng)站都會(huì)想辦法防止爬蟲程序接入。為了能夠更好的爬蟲,我們需要使用可變的ip地址,建立網(wǎng)絡(luò)爬蟲的第一原則是:所有信息都可
    發(fā)表于 12-12 17:39

    網(wǎng)絡(luò)爬蟲之關(guān)于爬蟲http代理的常見使用方式

    在做爬蟲的過程中,如果你爬取的頻率過快,不符合人的操作模式。有些網(wǎng)站的爬蟲機(jī)制通過監(jiān)測(cè)到你的IP異常,訪問頻率過高。就會(huì)對(duì)你進(jìn)行封IP處理。目前已有比較多的第三方平臺(tái)專門進(jìn)行代理IP的服務(wù),那
    發(fā)表于 04-26 17:43

    網(wǎng)絡(luò)爬蟲nodejs爬蟲代理配置

    隨著互聯(lián)網(wǎng)的發(fā)展進(jìn)步,現(xiàn)在互聯(lián)網(wǎng)上也有許多網(wǎng)絡(luò)爬蟲網(wǎng)絡(luò)爬蟲通過自己爬蟲程序向目標(biāo)網(wǎng)站采集相關(guān)數(shù)據(jù)信息。當(dāng)然互聯(lián)網(wǎng)的網(wǎng)站會(huì)有
    發(fā)表于 09-01 17:23

    python網(wǎng)絡(luò)爬蟲概述

    網(wǎng)絡(luò)爬蟲(Web Spider)又稱網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。網(wǎng)絡(luò)
    發(fā)表于 03-21 16:51

    一種新型網(wǎng)絡(luò)爬蟲的設(shè)計(jì)與實(shí)現(xiàn)

    網(wǎng)絡(luò)爬蟲是當(dāng)今網(wǎng)絡(luò)實(shí)時(shí)更新和搜索引擎技術(shù)的共同產(chǎn)物。文中深入探討了如何應(yīng)用網(wǎng)絡(luò)爬蟲
    發(fā)表于 02-26 14:23 ?9次下載

    爬蟲是如何實(shí)現(xiàn)數(shù)據(jù)的獲取爬蟲程序如何實(shí)現(xiàn)

    進(jìn)入大數(shù)據(jù)時(shí)代,爬蟲技術(shù)越來越重要,因?yàn)樗谦@取數(shù)據(jù)的一個(gè)重要手段,是大數(shù)據(jù)和云計(jì)算的基礎(chǔ)。那么,爬蟲到底是如何實(shí)現(xiàn)數(shù)據(jù)的獲取的呢?今天和大家分享的就是一個(gè)系統(tǒng)學(xué)習(xí)爬蟲
    發(fā)表于 01-02 16:30 ?10次下載
    <b class='flag-5'>爬蟲</b>是如何實(shí)現(xiàn)數(shù)據(jù)的獲取<b class='flag-5'>爬蟲</b>程序如何實(shí)現(xiàn)

    網(wǎng)絡(luò)爬蟲是否合法

    網(wǎng)絡(luò)爬蟲在大多數(shù)情況中都不違法,其實(shí)我們生活中幾乎每天都在爬蟲應(yīng)用,如百度,你在百度中搜索到的內(nèi)容幾乎都是爬蟲采集下來的(百度自營的產(chǎn)品除外,如百度知道、百科等),所以
    的頭像 發(fā)表于 03-21 17:20 ?1.3w次閱讀

    常用的網(wǎng)絡(luò)爬蟲軟件

    本視頻主要詳細(xì)介紹了常用的網(wǎng)絡(luò)爬蟲軟件,分別是神箭手云爬蟲、火車頭采集器、八爪魚采集器、后羿采集器。
    的頭像 發(fā)表于 03-21 17:25 ?3w次閱讀

    爬蟲技術(shù)為什么變成了害蟲?爬蟲技術(shù)到底犯了什么錯(cuò)?

     近日,多家通過爬蟲技術(shù)開展大數(shù)據(jù)信貸風(fēng)控的公司被查。短短幾天時(shí)間,“爬蟲技術(shù)被推上了風(fēng)口浪尖,大數(shù)據(jù)風(fēng)控行業(yè)也迎來了前所未有的“震蕩”。業(yè)內(nèi)人士透露,這些被調(diào)查的大數(shù)據(jù)公司基本都是
    的頭像 發(fā)表于 09-21 11:16 ?4422次閱讀

    爬蟲技術(shù)涉案大數(shù)據(jù)分析及法律解讀

    ? 爬蟲技術(shù)涉案大數(shù)據(jù)分析及法律解讀 爬蟲技術(shù)作為一種前端獲取網(wǎng)站信息數(shù)據(jù)的技術(shù),在目前大數(shù)據(jù)應(yīng)
    的頭像 發(fā)表于 01-12 16:39 ?4474次閱讀

    python網(wǎng)絡(luò)爬蟲概述

    網(wǎng)絡(luò)爬蟲(Web Spider)又稱網(wǎng)絡(luò)蜘蛛、網(wǎng)絡(luò)機(jī)器人,是一種按照一定的規(guī)則,自動(dòng)地抓取萬維網(wǎng)信息的程序或者腳本。 網(wǎng)絡(luò)
    的頭像 發(fā)表于 03-21 16:50 ?2215次閱讀