網站機器人偵測與緩解策略
您的網站正不斷受到機器人的攻擊。它們抓取您的內容、填充憑證、發送垃圾表單,並扭曲您的分析數據。但並非所有機器人都是壞的——搜尋引擎爬蟲、監控服務和 API 用戶端是必不可少的。挑戰在於區分它們,並在不傷害合法使用者的情況下封鎖惡意機器人。
本指南涵蓋了您今天就可以實施的實用機器人偵測與緩解策略,從簡單的速率限制到行為分析。
為什麼機器人偵測很重要
機器人佔據了網路流量的很大一部分。雖然有些是良性的,但其他則會造成實際損害:
- 內容抓取:競爭對手或 AI 模型複製您的獨特內容。
- 憑證填充:攻擊者嘗試使用竊取的用戶名/密碼對來接管帳戶。
- 庫存囤積:機器人購買有限庫存,使真實客戶無法購買。
- 表單垃圾訊息:虛假註冊和評論污染您的資料庫。
- DDoS:用請求淹沒您的伺服器。
有效的機器人緩解可以降低這些風險,同時保持使用者體驗。
1. 速率限制:您的第一道防線
速率限制限制用戶端在給定時間窗口內可以發出的請求數量。它簡單、有效,且不需要複雜的偵測邏輯。
在多個層級實施速率限制:
- 每個 IP 位址:限制來自單一 IP 的請求(例如,每分鐘 100 個請求)。
- 每個使用者帳戶:限制每個使用者的登入嘗試或 API 呼叫等操作。
- 每個端點:對敏感端點(如
/login或/checkout)套用更嚴格的限制。
使用 Nginx 的範例:
limit_req_zone $binary_remote_addr zone=login:10m rate=5r/m;
server {
location /login {
limit_req zone=login burst=3 nodelay;
proxy_pass http://backend;
}
}
這允許每個 IP 每分鐘對登入端點發出 5 個請求,並允許少量突發。
2. 使用者代理和標頭分析
機器人通常在 HTTP 標頭中有明顯的跡象。雖然使用者代理可以被偽造,但許多簡單的機器人並不會這樣做。
檢查以下項目:
- 缺少或通用的使用者代理字串(例如,「curl」、「python-requests」)。
- 不一致的標頭(例如,行動裝置的使用者代理但桌面螢幕解析度)。
- 與已知瀏覽器模式不符的標頭。
然而,不要僅依賴使用者代理——許多機器人會偽造它。將其作為眾多訊號之一。
3. JavaScript 挑戰
簡單的機器人通常無法執行 JavaScript。透過要求一個小的 JavaScript 挑戰,您可以過濾掉許多自動化請求。
運作方式:
- 伺服器返回一個包含 JavaScript 片段的頁面,該片段會計算一個權杖。
- 用戶端必須執行腳本並在下一個請求中提交權杖。
- 伺服器在提供內容之前驗證權杖。
這是 Cloudflare 的 Bot Management 和 Google 的 reCAPTCHA v3 等服務的基礎。您可以自行實作基本版本,但請注意進階機器人可以執行 JavaScript。
4. CAPTCHA 和工作量證明
CAPTCHA 是常見的機器人緩解工具,但它們會帶來可用性成本。現代 CAPTCHA(如 reCAPTCHA v3 或 hCaptcha)通常是隱形的,並對使用者行為進行評分。
工作量證明挑戰(如 Hashcash)要求用戶端在存取資源之前執行少量計算。這會減慢機器人的速度,而不會對真實使用者造成太大影響。
謹慎使用 CAPTCHA——僅在帳戶建立或密碼重設等高風險操作上使用。
5. 行為分析
進階機器人偵測會觀察使用者如何與您的網站互動。機器人傾向於:
- 以直線移動滑鼠,或完全不移動。
- 立即填寫表單,沒有停頓。
- 以可預測的模式點擊。
- 快速連續請求頁面,而不載入資源。
您可以收集用戶端訊號(滑鼠移動、按鍵、時間)並發送到您的伺服器進行分析。機器學習模型可以高準確度地將流量分類為人類或機器人。
6. 蜜罐
蜜罐是隱藏的表單欄位或連結,只有機器人會與之互動。例如,新增一個名為「email」的欄位,並透過 CSS 隱藏。如果它被填寫,您就知道這是機器人。
同樣地,您可以新增一個只有爬蟲會跟隨的隱藏連結。如果機器人點擊它,您可以封鎖其 IP。
7. IP 信譽和封鎖清單
維護一份已知惡意活動的 IP 清單。來源包括:
- 公開封鎖清單(例如,Spamhaus、AbuseIPDB)。
- 您自己的過去攻擊日誌。
- 雲端供應商 IP 範圍(機器人通常在 AWS、GCP 等上運行)。
小心不要封鎖合法使用者使用的共享 IP(例如,企業代理)。
8. 網頁應用程式防火牆(WAF)
像 ModSecurity、AWS WAF 或 Cloudflare 這樣的 WAF 可以使用規則集偵測和封鎖機器人流量。它們還可以透過機器學習提供受管理的機器人偵測。
WAF 有效,但需要調整以避免誤判。
9. API 特定的緩解措施
如果您有 API,請使用以下方式保護它:
- API 金鑰:要求所有請求進行驗證。
- 每個金鑰的速率限制:防止濫用。
- 請求簽章:確保請求來自合法用戶端。
- 配額:限制每天的總請求數。
10. 監控和記錄
您無法緩解您未測量的東西。記錄所有請求並分析模式。尋找:
- 來自單一 IP 或子網的突然流量高峰。
- 高 404 錯誤率(掃描漏洞)。
- 不尋常的使用者代理字串。
- 登入失敗嘗試。
像 Nginx Log Analyzer 這樣的工具可以幫助您解析日誌並快速識別機器人活動。
機器人緩解技術比較
| 技術 | 有效性 | 使用者影響 | 實作複雜度 |
|---|---|---|---|
| 速率限制 | 中 | 低 | 低 |
| 使用者代理分析 | 低 | 低 | 低 |
| JavaScript 挑戰 | 中高 | 低 | 中 |
| CAPTCHA | 高 | 高 | 低 |
| 行為分析 | 高 | 低 | 高 |
| 蜜罐 | 中 | 無 | 低 |
常見問題
如何區分好機器人和壞機器人?
好機器人(如 Googlebot)通常會以合法的使用者代理識別自己,並來自經過驗證的 IP 範圍。您可以透過執行反向 DNS 查詢來驗證 Googlebot。壞機器人通常會偽造使用者代理,並來自雲端主機 IP。行為訊號和速率模式也有助於區分。
機器人緩解會損害我的 SEO 嗎?
如果正確實施,不會。確保搜尋引擎爬蟲被列入允許清單。大多數機器人緩解服務會維護合法爬蟲的清單。避免不分青紅皂白地封鎖所有機器人——允許經過驗證的搜尋引擎機器人存取您的內容。
什麼是最好的機器人緩解策略?
沒有單一的最佳策略。分層方法效果最好:結合速率限制、JavaScript 挑戰和行為分析。從速率限制和記錄開始,然後根據需要新增更進階的技術。始終監控誤判並進行調整。
結論
機器人偵測和緩解是一場持續的戰鬥。從速率限制和記錄等基本措施開始,然後隨著網站成長,分層新增更進階的技術。始終平衡安全性和使用者體驗——過於激進的機器人封鎖可能會趕走真實使用者。
記得定期檢閱您的日誌並調整策略。如需快速日誌分析,請嘗試 Nginx Log Analyzer 來發現流量中的機器人模式。