跳到主要內容
AI News HubLIVE
站內改寫1 分鐘閱讀

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

文章摘要

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

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

展開要點與分析

文章情報

工程師中級

要點

  • Simon Willison 使用 Cloudflare 的託管挑戰保護其分面搜尋引擎免遭爬蟲過度抓取。
  • 簡單的搜尋 URL(如 /search/?q=lemur)也會觸發 CAPTCHA,影響使用者體驗。
  • 透過 Claude Code,他配置了規則:(http.request.uri.path wildcard r"/search/*" and http.request.uri.query contains "&")。
  • 該規則僅對包含 & 符號的複雜查詢觸發 CAPTCHA,簡單搜尋不再被攔截。

要點與分析由自動化流程生成,可能有誤,請結合原始來源核實。