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)快速解決技術難題的潛力。