AI News HubLIVE
站内改写1 分鐘閱讀

Cloudflare CAPTCHA:僅針對包含至少一個“&”的搜索觸發

Simon Willison 使用 Cloudflare 託管挑戰(CAPTCHA)來防止爬蟲過度抓取其分面搜索引擎,但簡單的搜索(如 ?q=term)也會觸發挑戰,令人困擾。通過 Claude Code 的幫助,他發現可以設置自定義規則,僅對包含至少一個 & 符號的搜索 URL 觸發 CAPTCHA,從而讓簡單搜索免於挑戰。

Simon Willison 在其個人網站上運行着一個分面搜索引擎,該搜索引擎基於 Django 和 PostgreSQL 構建,允許用户通過多種維度進行組合查詢。然而,這個功能強大的工具也吸引了大量爬蟲,它們會系統地遍歷所有可能的搜索組合,給服務器帶來了不小的壓力。

為了保護網站資源,Willison 使用了 Cloudflare 的 Web 應用程序防火牆(WAF)功能,具體來説是其中的“託管挑戰”(Managed Challenge),也就是我們常説的 CAPTCHA。這種方法原本能夠有效阻止惡意爬蟲,但一個令人煩惱的問題是,即使是像 /search/?q=lemur 這樣最簡單的搜索請求,也會觸發 CAPTCHA 挑戰,給真實用户帶來不便。

為了解決這個問題,Willison 嘗試使用 Claude Code 來尋找更精細的控制方法。經過一番摸索,他發現可以在 Cloudflare 中設置一條自定義規則,使得 CAPTCHA 僅在搜索 URL 包含至少一個 & 符號時才會被觸發。這條規則的具體表達式為:

(http.request.uri.path wildcard r"/search/*" and http.request.uri.query contains "&")

在 Cloudflare 的規則引擎中,& 符號代表了 URL 查詢參數之間的分隔符。簡單的搜索只有 q 參數,因此不包含 &;而複雜的多參數搜索(例如 ?q=lemur&sort=date&page=2)則會包含 &。通過這條規則,只有那些多參數、可能是爬蟲構造的複雜查詢才會受到 CAPTCHA 的限制,而普通的單參數搜索則暢通無阻。

Willison 表示,應用這條規則後,/search/?q=lemur 這樣的 URL 不再彈出 CAPTCHA 挑戰,用户體驗得到了顯著提升。這個技巧不僅解決了實際問題,也展示了 Cloudflare 規則引擎的靈活性和強大功能,同時體現了通過 AI 輔助工具(如 Claude Code)快速解決技術難題的潛力。