話題の記事

「わたしはロボットではありません」的なパズル(CAPTCHA)をAWS WAFで設定できるようになりました

2021.11.09

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

ドキュメントをながめていたところ、AWS WAFでCAPTCHAが利用可能になったようです!

CAPTCHAって何?

CAPTCHAはCompletely Automated Public Turing test to tell Computers and Humans Apartの略で、簡単に言ってしまうとWebサイトへのリクエストがコンピュータによるものか人がアクセスしているのかを区別するためのテストです。

「私はロボットではありません」

という項目にチェックを入れて、難読な文字を入力したり、簡易的なパズルを行ったりした経験が皆さんあるかと思います。それです。

CAPTCHAチャレンジパズル

ささっと検証したところでは3つのパズルを確認することができました。

視覚パズル

1つはカーソルをスライドし、右上に指示された図形と同じ図形を完成させます

もう1つは、車のルートをたどり、最終地点にポイントを打ちます

オーディオパズル

2つのワードを聞き取り、ユーザーはテキストを入力します。認識を難しくするためにバックグラウンドノイズが流れますが、私の耳ではそもそも英語を聞き取ることが難しかったです。。

BoT対策などに効果的

キャンペーンサイトなど注目のあつまるWebページではBoTによるアクセスに悩まされることが多々あるかと思います。これまでAWS WAFではレートベースで異常なアクセスを除外したり、AWS WAF Bot Controlで自動判別するなどの対策がありましたが、あらたに有効な手段が追加されましたね!

やってみる

さっそくAWS WAFを使って試してみましょう。

今回はバージニアリージョンのALBに対して、WAFを設定しています。

執筆時点においては以下のWebACLではCAPTCHAルールを追加できませんでした。(今後、正式リリース以降に正確な情報がわかり次第更新します)

  • CloudFrontのWebACL
  • 東京リージョンのWebACL

CAPTCHAルールの追加

対象のWeb ACLを選択し、Rulesタブを開きます。Add rulesメニューからAdd my own rules and rule groupsを開きます。

CAPTCHAを要求するリクエストパターンを設定しますが、今回は特定のURIパス(/test.html)に対してのみCAPTCHAチャレンジを要求するようにしました。

動作確認

先ほど設定した/test.htmlにアクセスしてみると、以下の画面が表示されましたのでBeginで進みます。

スライドを動かし右上に表示された図形を完成させたら、Submitをクリックします。

パズルが成功していれば以下の画面が表示され、Webページへアクセスが可能となります。

トークンイミュニティ時間

CAPTCHAチャレンジに成功するとCAPTCHAトークンによって以降のチャレンジはパスすることができます。デフォルトは300秒間有効ですが、設定によって60秒〜259,200秒(3日間)まで設定が可能です。

まとめ

  • AWS WAFでBoT対策に有効なCAPTCHAが利用可能になりました
  • 執筆時点では2パターンの視覚パズルとオーティオパズルの計3パターンのパズルが用意されている
  • レートベースやBot Controlをくぐり抜けてくるような巧妙なアクセスに悩まされている場合は一度お試しください

参考