惡意爬蟲?能讓惡意爬蟲遁于無(wú)形的小Tips

前言

驗(yàn)證碼是阻擋機(jī)器人攻擊的有效實(shí)踐,網(wǎng)絡(luò)爬蟲,又被稱為網(wǎng)絡(luò)機(jī)器人,是按照一定的規(guī)則,自動(dòng)地抓取網(wǎng)絡(luò)信息和數(shù)據(jù)的程序或者腳本。如何防控,這里簡(jiǎn)單提供幾個(gè)小Tips。

使用nginx的自帶功能

通過(guò)對(duì)httpuseragent阻塞來(lái)實(shí)現(xiàn),包括GET/POST方式的請(qǐng)求,以nginx為例。

拒絕以wget方式的httpuseragent,增加如下內(nèi)容:

Block http user agent - wget
if ($http_user_agent ~* (Wget) ) {
    return 403;
}

如何拒絕多種httpuseragent,內(nèi)容如下:

if ($http_user_agent ~ (agent1|agent2|Foo|Wget|Catall Spider|AcoiRobot) ) {
    return 403;
}

限制User-Agent字段

User-Agent字段能識(shí)別用戶所使用的操作系統(tǒng)、版本、CPU、瀏覽器等信息,如果請(qǐng)求來(lái)自非瀏覽器,就能識(shí)別其為爬蟲,阻止爬蟲抓取網(wǎng)站信息。

限制IP或賬號(hào)

根據(jù)業(yè)務(wù)需求,要求用戶通過(guò)驗(yàn)證碼后才能使用某些功能或權(quán)限。當(dāng)同一IP、同一設(shè)備在一定時(shí)間內(nèi)訪問(wèn)網(wǎng)站的次數(shù),系統(tǒng)自動(dòng)限制其訪問(wèn)瀏覽。只有在輸入正確的驗(yàn)證碼之后才能繼續(xù)訪問(wèn)。

驗(yàn)證碼攔截

在登錄頁(yè)等頁(yè)面,添加驗(yàn)證碼,以識(shí)別是正常流量還是惡意爬蟲,也是一種基本的操作。

HTML代碼:

<script src="captcha.js?appid=xxx"></script>
<script>
kg.captcha({
    // 綁定元素,驗(yàn)證框顯示區(qū)域
    bind: "#captchaBox3",
    // 驗(yàn)證成功事務(wù)處理
    success: function(e) {
        console.log(e);
        document.getElementById('kgCaptchaToken').value = e['token']
    },
    // 驗(yàn)證失敗事務(wù)處理
    failure: function(e) {
        console.log(e);
    },
    // 點(diǎn)擊刷新按鈕時(shí)觸發(fā)
    refresh: function(e) {
        console.log(e);
    }
});
</script>

<div id="captchaBox3">載入中 ...</div>
<input type="hidden" name="kgCaptchaToken" value="" />

Python代碼:

from wsgiref.simple_server import make_server
from KgCaptchaSDK import KgCaptcha
def start(environ, response):
    # 填寫你的 AppId,在應(yīng)用管理中獲取
    AppID = "xxx"
    # 填寫你的 AppSecret,在應(yīng)用管理中獲取
    AppSecret = "xxx"
    request = KgCaptcha(AppID, AppSecret)
    # 填寫應(yīng)用服務(wù)域名,在應(yīng)用管理中獲取
    request.appCdn = "https://cdn.kgcaptcha.com"
    # 請(qǐng)求超時(shí)時(shí)間,秒
    request.connectTimeout = 10
    # 用戶id/登錄名/手機(jī)號(hào)等信息,當(dāng)安全策略中的防控等級(jí)為3時(shí)必須填寫
    request.userId = "kgCaptchaDemo"
    # 使用其它 WEB 框架時(shí)請(qǐng)刪除 request.parse,使用框架提供的方法獲取以下相關(guān)參數(shù)
    parseEnviron = request.parse(environ)
    # 前端驗(yàn)證成功后頒發(fā)的 token,有效期為兩分鐘
    request.token = parseEnviron["post"].get("kgCaptchaToken", "")  # 前端 _POST["kgCaptchaToken"]
    # 客戶端IP地址
    request.clientIp = parseEnviron["ip"]
    # 客戶端瀏覽器信息
    request.clientBrowser = parseEnviron["browser"]
    # 來(lái)路域名
    request.domain = parseEnviron["domain"]
    # 發(fā)送請(qǐng)求
    requestResult = request.sendRequest()
    if requestResult.code == 0:
        # 驗(yàn)證通過(guò)邏輯處理
        html = "驗(yàn)證通過(guò)"
    else:
        # 驗(yàn)證失敗邏輯處理
        html = f"{requestResult.msg} - {requestResult.code}"
    response("200 OK", [("Content-type", "text/html; charset=utf-8")])
    return [bytes(str(html), encoding="utf-8")]
httpd = make_server("0.0.0.0", 8088, start)  # 設(shè)置調(diào)試端口  http://localhost:8088/
httpd.serve_forever()

最后

SDK開(kāi)源地址:KgCaptcha (KgCaptcha) · GitHub,順便做了一個(gè)演示:凱格行為驗(yàn)證碼在線體驗(yàn)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 爬蟲的基礎(chǔ)知識(shí) 爬蟲的定義 只要是瀏覽器可以做的事情,原則上,爬蟲都可以幫助我們做,即:瀏覽器不能夠做到的,爬蟲也...
    jxvl假裝閱讀 1,018評(píng)論 0 1
  • 1 爬蟲高級(jí) 1.1 動(dòng)態(tài)HTML處理和機(jī)器圖像識(shí)別 爬蟲(Spider),反爬蟲(Anti-Spider),反反...
    創(chuàng)造new_world閱讀 478評(píng)論 0 0
  • 基本庫(kù)的使用 urllib庫(kù) urllib庫(kù)包含四個(gè)模塊:· request:請(qǐng)求模塊,模擬發(fā)送請(qǐng)求?!?erro...
    anRank閱讀 702評(píng)論 0 1
  • HTTP基本原理 URI、URL、URN(Uninform Resource) URI(Identifier):統(tǒng)...
    GHope閱讀 2,303評(píng)論 2 26
  • 有的時(shí)候,當(dāng)我們的爬蟲程序完成了,并且在本地測(cè)試也沒(méi)有問(wèn)題,爬取了一段時(shí)間之后突然就發(fā)現(xiàn)報(bào)錯(cuò)無(wú)法抓取頁(yè)面內(nèi)容了。這...
    木子教程閱讀 287評(píng)論 0 1

友情鏈接更多精彩內(nèi)容