CAPTCHAの代替となるCloudflare Turnstileが便利すぎる
https://2.bp.blogspot.com/-H2eLSLfzvpA/XGjx1UapC6I/AAAAAAABRcA/5Xdh-W7tqk8X1YONndv2B1ykhJ6BRS1bgCLcBGAs/s800/ai_computer_sousa_robot.png
【前提】
ボットによる操作か人間による操作なのかをテストする際に真っ先に浮かぶのがCAPTCHA機能であり、ベンダーが提供するサービスとしては、reCAPTCHAやhCaptchaなどが挙げられます。これらの機能はユーザーに画像のチェック等の操作をすることでユーザーが人間なのかロボットなのかを判別することができます。一方で、これらのユーザーアクションはユーザー体験を損ねてしまう可能性があるため、セキュアなアプリケーションを担保するためのトレードオフとなったりします。ではユーザー体験を損ねず、アプリケーションのセキュリティを担保することはできないのでしょうか? 【結論】
【認証の流れと実装】
Cloudflare Turnstileによる認証の流れは以下のとおりです。
1. クライアントサイドでボットかどうかを判別するチャレンジを実行し、実行結果を内包するトークンをchallenges.clloudflare.comから取得
2. 取得したトークンを自サービスのサーバーサイドに投げる
3. 2のトークン、Cloudflare Turnstileが提供するsitekeyおよびsecret keyをchallenges.clloudflare.comのSiteverify APIに投げることで認証を実施
下記に擬似コードを記載します。
code: test.ts
import fetch from 'node-fetch' // Node.js < 18のとき
...
const result await fetch(url, Json.stringify(
{
secret,
response,
ip,
})
)
...
【余談】
このクオリティを無料で提供してるCloudflareは本当にすごいです…。