爬蟲程序中,默認情況下,只請求HTML文本資源,這意味着它們不會主動完成瀏覽器保存Cookie操作。
- 瀏覽器工作:
瀏覽器在請求時,自動檢查響應頭中是否存在Set-Cookie,如果存在,則保存在本地,請求時,就會帶上對應的Cookie值對服務器進行校驗,校驗成功,返回200,否則進行其它操作,如重置Cookie,返回403等。
如果請求時,Set-Cookie不存在,服務器設置Cookie,重定向,返回403等等。
- nginx配置:
nginx中設置響應頭配置:
location /verify/cookie/index.html{
#設置Cookie值爲 hccfm=123456789
add_header Set-Cookie "hccfm=123456789";
root /root/www/html;
index /index.html;
}
nginx中校驗cookie配置:
location /verify/cookie/index.html{
# cookie不符合要求,返回403
if ($http_cookie !~* "hccfm=123456789"){
return 403;
}
root /root/www/html;
index index.html;
}
- Cookie 與 JavaScript結合提高反爬技術:
爲了提高校驗,可以結合JS代碼來提高難度。這裏用到JS中的Location對象,通過JS代碼對產生規則字符串,如字符串拼接,時間戳,正則規則等。
JavaScript 設置 cookie:
document.cookie = 'hccfm='+函數返回字符+實時字符拼接
nginx 校驗 cookie:
if ($http_cookie !~* "hccfm=正則規則")
正則規則,通過自己設計方式來編寫,如果是時間戳,可以通過當前時間與cookie的值進行差值計算,當時間差超過一定的時間(如10秒),則返回403
對於Cookie與JavaScript的結合,因爲它實現了Cookie實時校驗,所以在解決這個問題上,我們需要獲取多個Cookie值進行對比,進行分析。找到其中的規律,進行請求的Cookie僞造。
提示:
在nginx時間戳差值計算時,nginx無法獲取當前時間戳,可以通過nginx中名爲 ngx_http_lua_module 的模塊。使用Lua語言嵌入到nginx中進行獲取。
-帶用戶過濾的反爬技術:
除了上述的操作之外,用戶行爲也是非常見的,在採集數據時,需要用戶登陸,用戶權限等,這時也需要用到Cookie的校驗操作。
頁面校驗過程:
- 客戶端通過POST請求,將用戶名與密碼發送到服務器;
- 服務器接收請求,獲取用戶名與密碼在數據庫中進行校驗;
- 校驗成功,設置用戶Cookie;返回200,失敗,其它操作;
對於以上行爲,看程度員的騷操作。