CloudFlare 5秒盾 破解! challenge by pass! 成功突破防火牆! 爬蟲、機器人
近期在撰寫爬蟲機器人,發現許多網站都裝上了CloudFlare的防火牆,其中5秒盾是最難攻克的一環。
5秒盾的工作原理是,一旦他覺得你可疑,就會把頁面跳到challenge.html,透過Javascript等待5秒,並且重新送出表單逼你按確定。
才可以重新進入網站。
我試過建立完整的HTTPHEADER以及user-agent依然沒用,還是會被跳轉到challenge.html。
用網路找來的透過第三方網站幫你計算Javascript的五秒盾解密也是失敗。
就算用python的webbrowser先開啟Firefox來破解五秒盾後再進網站有時還是會失敗。
至於PHP,原本想法是先用A.php去取得cloudflare的cookie後,再把這個數值換到B.php身上,再訪問網站,依然失敗。
Cloudflare不虧是世界大站,防火牆等級很高XD
但即使如此,我還是發現了可用的方法!
原理說明:
1.訪問目標網站時,若對方開啟cloudflarfe的網站,這時瀏覽器會取得一組「app_session」的cookie
2.cloudflare會針對這組cookie進行檢測,判斷是否有正常訪問和更新。
3.如果「app_session」未有資料,或是進行不正常訪問,頁面就轉到challenge.html去做驗證。
根據上述,會發現關鍵在於「app_session」有持續更新,所以我的作法如下,以php Curl為例:
1.先用Firefox開啟目標網站,取得完整的cookie值以及User-Agent資料
2.把取得的cookie值,套進curl裡面的「curl_setopt($ch, CURLOPT_COOKIE, $setcookie);」$setcookie這個參數。
3.把取得的User-agent資料,套進curl裡面的「curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);」$headers這個參數。
基本上php修改成這樣就可以了。接下來才是關鍵!
4.Firefox安裝套件 Tab Reloader (page auto refresh)
5.Firefox在目標網站啟動Tab Reloader (page auto refresh)這個擴充套件,並且做下圖設定。
Enable Reloader for this tab 及 Bypass form submission: 要啟用,秒數設定10秒。
如此一來,剛剛得到的「app_session」這組資料就會不斷地被更新,也就比較不容易被轉到challenge.html去做驗證。
Firefox跟php不需要同一個IP,換句話說,你可以透過A電腦開啟firefox取得app_session後,拿到B電腦去用。
只要A電腦的有持續更新app_session就可以了。
===2020/01/03補充====
最好是拿兩種瀏覽器如 Chrome及Firefox 同時進行重新整理動作。
上面這個方法我已經測試了24H*14天,目前一切都正常,未有被檔死的經驗。
有被擋過數次,但很快透過Firefox的autorefresh功能後就會通過驗證了。
以上,如果您有更好的方法,也歡迎在下方留言交流!