AI News HubLIVE
站内改写2 分で読了

Cloudflare CAPTCHA:少なくとも1つのアンパサンドを含む検索にのみ適用

Simon Willison は、Cloudflare のマネージドチャレンジ(CAPTCHA)を使用して、自身のファセット検索エンジンを過剰なクローラーから保護しています。しかし、?q=term のような単純な検索でもチャレンジが発生することに悩んでいました。Claude Code を使った試行錯誤の結果、少なくとも1つの &(アンパサンド)を含む検索URLにのみ CAPTCHA をトリガーするルールを設定できることがわかり、単純な検索はチャレンジなしで動作するようになりました。

Simon Willison は、自身の Web サイト上で Django と PostgreSQL をベースにしたファセット検索エンジンを運用しています。この検索エンジンは複数の次元での組み合わせ検索を可能にする強力なものですが、その反面、クローラーが考えられるすべての組み合わせを系統的に巡回し、サーバーに大きな負荷をかけるという問題がありました。

この問題に対処するため、Willison は Cloudflare の Web アプリケーションファイアウォール(WAF)機能、具体的には「マネージドチャレンジ」(Managed Challenge)と呼ばれる CAPTCHA を導入しました。この対策は悪意のあるクローラーを効果的にブロックする一方で、/search/?q=lemur のようなごく単純な検索リクエストにも CAPTCHA チャレンジが表示されるという副作用があり、実際のユーザーにとっては大きなストレスとなっていました。

この問題を解決するため、Willison は Claude Code を活用してより細かな制御方法を模索しました。試行錯誤の結果、Cloudflare のカスタムルールとして、以下のような条件式を設定することで、CAPTCHA をアンパサンド(&)を少なくとも1つ含む検索URLにのみトリガーさせられることが判明しました。

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

URL において & はクエリパラメータ間の区切り文字として機能します。単純な検索では q パラメータのみが含まれるため & は出現しませんが、複数のパラメータを持つ複雑な検索(例:?q=lemur&sort=date&page=2)では & が含まれます。このルールにより、複数パラメータを持ちクローラーによって生成された可能性の高い複雑なクエリのみが CAPTCHA の対象となり、単一パラメータの単純な検索はブロックされずに通過できるようになりました。

Willison は、このルールを適用した後、/search/?q=lemur のような URL で CAPTCHA が表示されなくなり、ユーザーエクスペリエンスが大幅に改善されたと報告しています。このテクニックは、Cloudflare のルールエンジンの柔軟性と強力さを示すだけでなく、Claude Code のような AI 支援ツールを用いて技術的な問題を迅速に解決できる可能性を示す好例と言えるでしょう。