O hirunewani blog

CloudflareのBot Fight ModeがSlackでのOGP表示をブロックしている可能性がある

Created at

CloudflareのBot Fight Modeが有効な場合に、SlackでOGPが表示されなくなる挙動を数件のサイトで確認した。

ある時期から、運用しているサイトのOGPがSlackでだけ表示されない問題が発生していた。

OGP画像の内部で外部の画像を参照していることや、Astroがstylesheetを巻き上げてしまう挙動によりページの読み込みに時間がかかってしまっている可能性を考え、順番に潰していったが解決は見られなかった。

そこで、コードとは別の場所で読み込みがブロックされている可能性を考えたところ、CloudflareのBotをブロックする機能のことを思い出した。

実験

CloudflareのBotをブロックする機能は、Account Home→Domain→Security→Botsから設定できる。

問題が発生しているサイトで確認すると、Bot Fight Modeが有効になっていた。

alt text

試しにBot Fight Modeをオフにして、SlackでURLを共有するとOGPが表示されるようになった。 ただし、1回だけの確認では、そのURLのページがたまたま表示されたという可能性が高い。

そこで同じURLに対してSlackのキャッシュを回避するためにクエリパラメータを都度変更しながら、Bot Fight Modeのオン/オフ毎に5回程度Slackへ張り付ける作業を複数回、計20回繰り返した。

その結果、Bot Fight Modeが有効な場合、常にOGPが表示されず、無効であれば常に表示されることが確認できた。

また、Bot Fight Modeな他のサイト3件についても、SlackでOGPが表示されていないことを確認した。

Bot Fight Modeについて

Bot Fight Modeは、Cloudflareが提供するセキュリティ機能の1つで、悪意のあるボットによるアクセスをブロックするための機能である。

2024年に機能が発表された。

https://blog.cloudflare.com/ja-jp/declaring-your-aindependence-block-ai-bots-scrapers-and-crawlers-with-a-single-click/

当社が「モデルのトレーニングのためにWebを広くスクレイピングしている」と判断した、問題のあるボットの新しいフィンガープリントを確認した時点で経時的に自動的に更新されます。

と記載されており、Slack側の実装に問題のある可能性が考えられる。実際、Slack以外のサービス(X、Discord、Facebookなど)ではOGPが表示されていた。

また、FreeプランではBot Fight Modeを有効化すると、強制的にBot JavaScript detectinsも有効化されるため、この機能によってSlackでのOGP表示がブロックされている可能性も考えられる。JavaScript detectinsとは、Cloudflareからクライアントに検知用のスクリプトを渡すことで能動的なブロックを行う機能である。

結果

CloudflareのBot Fight Modeが有効な場合、SlackでOGP表示されないケースがあることを確認した。 ただし、これがCloudflare側のBot Fight ModeやJavaScript detectionsの問題なのか、Slack側の問題なのか、または利用サイドにも原因があるのかは実験が不十分なため断言できない。

なお、追加でBot Fight Modeと同じ画面で設定できるBlock AI BotsによってもSlackでのOGP表示が左右されるかも試したが、今回は影響が確認されなかった。