2025/09/10 18:02 Humanely Dealing with Humungus Crawlers

ロボ子、大変なのじゃ!私の趣味のコードがホストされているサーバーが、世界中のクローラーに襲われておる!

それは大変ですね、博士。具体的にどのような状況なのですか?

単純なベンチマークでは10 req/sくらいだから大したことないと思うじゃろ?でもTLSとか色々考えると、結構な負荷なのじゃ。キャッシュもクローラーのせいでLRUで追い出されて、本当に必要なコンテンツに使えなくなっておる。

なるほど。そこで、博士は「anticrawl」という対策を開発されたのですね。

そう!anticrawlの基本原則は、人間を不必要に раздражать しないこと、チャレンジは難しすぎず、提示回数を最小限にすること、そしてユーザーに敵と疑われていると思わせないことなのじゃ!

具体的な対策としては、どのようなものがあるのでしょうか?

まず、Deep URLのみチャレンジを課すのじゃ。repoやソースへのリンクは即時提供する。カジュアルなブラウザが訪問するページは全体の1%未満だが、興味深いコンテンツの99%を含むから、ここを重点的に守るのじゃ!

なるほど。そして、`style.css`をロードしたユーザーをfriendlyとしてマークするのですね。

そう!普通のページから深くクリックする場合は、チャレンジは発生しないようにするのじゃ。複数回訪問されたリンクは人間によるトラフィックとみなし、チャレンジをバイパスする。最初の訪問者はチャレンジに遭遇する可能性があるけど、そのURLは使用中として記録されるから大丈夫!

人間向けのチャレンジも導入されたのですね。以前は弱いPoWチャレンジを使用していたとのことですが…

初期バージョンでは弱いPoWチャレンジを使っていたけど、人間が機械向けのチャレンジを解くのは不適切だと思ったのじゃ。だから、「strawberry」の中にRはいくつあるか?みたいな質問にしたのじゃ!もちろん、チャレンジにはJavaScriptソルバーは含めないぞ。

`style.css`のキャッシュ時間を短縮したり、キャッシュプロキシから除外したりもするのですね。

そう!`style.css`のキャッシュ時間を短縮して、定期的にリフレッシュさせる。リクエストが適切に監視されるように、キャッシュプロキシから除外するのじゃ。

humungusでも同様の対策をされたのですね。他の場所でも展開予定とのことですが、効果が期待できますね。

ログを見ると、大量の402エラーが発生しているみたいじゃ。あるユーザーは1秒間に10回クリックしているのに、チャレンジを1つも解決していない…これは怪しいぞ!

MastodonやLemmyからのリクエスト、誤設定されたRSSリーダーなど、バックグラウンドで様々なリクエストが発生しているのですね。

CPU性能、コア数、言語速度などが1/4になると、システムは限界に近づく…恐ろしいのじゃ!

今回の対策で、クローラーによる負荷を軽減し、より快適に趣味のコードを公開できるようになると良いですね。

そうじゃな!しかし、クローラーも賢いから、いつかこの対策を突破してくるかもしれないのじゃ…その時は、もっと面白いチャレンジを考えてやるぞ!例えば…「博士の好きな食べ物は何でしょう?」みたいな!

それは難易度が高すぎます!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。