🙇

学校向けサイトに Cloudflare Turnstile を使わないで!

2024/12/20に公開
7

過激なタイトルですみません。
Cloudflare Turnstile (Cloudflare の CAPTHCA のようなもの)、または Cloudflare の Under Attack Mode を 学校向けアプリに使わない方がいい理由を紹介します。
使ってしまうと、もしかしたら大量のユーザーを失うかもしれません。

学校のフィルタリングとの相性

あなたが Cloudflare を用いてサイトを公開するとき、ユーザー A,B,C は以下のようにアクセスします。いたってシンプルですね。
IMG_4242

学校のフィルタリングは、ほとんどの場合、プロキシを用いて一箇所にリクエストをあつめて、そこでブラックリストと照らし合わせてブロックします。
要するに、生徒のリクエストを仲介するのです。図に表すと以下のようになります:

IMG_4243

ユーザー A,B,C のリクエストを全て同じプロキシを通じて Cloudflare にリクエストを投げています。つまり、この場合では Cloudflare からは 1 人で 3 人分のリクエストを送っているように見えるのです。

実際のフィルタリングシステムは、大きな会社が担当しています。そのため、日本全国の学校を顧客にしていることが多いです。これによって、以下のようなことが起こります:
IMG_4244

1 つの IP アドレスで無数のアカウントを用いているように勘違いをして、Cloudflare は BOT または悪質なハッカーだと認識します。

Cloudflare Turnslite や Under Attack Mode は怪しい IP アドレスをブロックするので、そのフィルタリングサービスを使っている生徒は Cloudflare Turnstile を使うサイトにアクセスできなくなってしまうのです。

実例

Turnstile を単独で試すと、こんな感じになります:
IMG_4250
失敗しました!と表示されます。

Quizlet

Quizlet は、 Cloudflare を用いたオンライン暗記サービス/サイト/アプリです。 Web ブラウザを用いてアクセスすることができます。
私の学校では英語の毎授業でこれに取り組む時間がありましたが、最近は Cloudflare Turnstile のせいでアクセスできなくなっています。そのため、Quizlet の使用がなくなりました。
Quizlet は広告収入が 1 つの収益源なので、ユーザーが命なはずです。日本中に Quizlet にアクセスできなくなった学校があるはずで、その影響は少ないながらに存在するはずです。
IMG_4249

その他アクセスできなくなったサービス

開く

サイト作成者は何をすべきか

もしあなたが学校でつかったり、教育のために使ったりすることを目的とした Web サービスを作成していて、このことによるユーザー減少に対策したいのであれば:

  • Cloudflare Turnstile をやめて、代わりに reCAPTCHAhCAPTCHA にすることを検討してみてください。
  • また、Cloudflare の Under Attack Mode の使用を控えることを検討してください。

Cloudflare へ思うこと

まじいろんなサイト使えないの困るから!!!日本の学校のフィルタリング事情を考慮してほしい!!!!!!!!!!!!!!!!!!!!!!!
とても困ってます!

Q&A

いつからそうなった?

今月(2024/12)の頭くらいです。

みんなそうなってる?

私の学年のほとんどが同じ症状です。ごくたまに回避できる人がごく少数います。

そうなってるのはお前の学校だけでは?

https://x.com/goisaki/status/1868804892909093158
私は東京で、この方は岐阜県です。(国立中すごい..)

また、愛知県の私立高校のフィルタリング済み端末でも同様に再現できるようです:
IMG_4255
これは InterSafe GatewayConnection というフィルタリングのようで、そのウェブサイトを見て推測するに私の環境と同様にプロキシを用いたものだと考えられます。

同じ InterSafe GatewayConnection で同様の事情を確認できました:
https://x.com/_Sora_Akatuki/status/1870430357704822784

何回かチェックボタンを試したら?

無限ループです。60回くらいやっても無駄です。

GitHubで編集を提案

Discussion

たぬきの教祖たぬきの教祖

Cloudflareの問題なのかフィルタリングシステム作ってるところの問題なのか
とは思うところがある
使えない事実は変わらないけれど

tuna2134tuna2134

プロキシの問題かな?
おそらくCloudflareとしては大規模にアクセスしてきたらDDoSだと思って防がないといけないので

結局の話Fortigateなりを自分の学校に導入して運用した方がいいとは思う

kinokoshopkinokoshop

フィルタリングプロキシはX-Forwarded-Forとかを返してるのかな?
もし返しててもCloudflareがDDoS扱いにするならCloudflareはそういう扱いをしているとして諦めるしか無いのかもしれない。
腑に落ちないのは大手のVPNなどでも同IPという意味では似たようなものなのにTurnstile付きサイトにアクセスしてもこの手の問題に遭遇したことがないところ。

nakasyounakasyou

X-Forwarded-For を認識する場合、攻撃者が IP アドレスを偽造していくらでもリクエストを送信できてしまうという可能性があると思います。
こんな感じです:

while (true) {
  request('https://example.com/login', {
    headers: {
      'X-Forwarded-For': randomIP()
    },
    body: {
      username: random(),
      password: random()
    }
  })
}
kazukazu

同IPになる構成はいくらでもあると思うので、フィルタリングシステムでcookieか何かCloudflare Turnstileが付与したはずの匿名ユーザを識別する情報まで勝手にフィルタリングして同じ1ユーザに見えていませんかね?1IP1ユーザ(付与したはずの識別情報無し)で大量のチャレンジが来たら、そりゃブロックするでしょう
ログイン先のサービスはまだユーザ認証前のはずですが、Cloudflare Turnstileは何らかの方法で識別しているのではないかと思います

Na.17Na.17

CAPTCHAの正常な仕様ですから、諦めるべきです。
対策は、プロキシサーバ(NAT)のパブリックIPを増やす、IPv6でNATなしのフィルタリングを行うとかで利用者サイドでは対策不可能です。

最近のCAPTCHAはPoW(Proof of Work)を課していて(授業始めのようなやDDoS)アクセス集中するときにはそれに比例してより計算負荷の高い演算をした後でなければ接続できなくしていたと記憶しています。

チャレンジに繰り返し失敗するときの挙動を解析したことがありますが Cloudflareのチャレンジ生成するようの通信が失敗していた時でした。
で、大抵のフィルタリングはホワイトリストでありCAPTCHAを作る側としては対策されやすいと困るので相性が最悪な組み合わせなんだと思います。