OXY NOTES

Question2AnswerへreCAPTCHAを導入する方法

Question2Answerを通してreCAPTCHA仕組みと使い方を解説

私が管理するSUKEGRAというサイトではQuestion2AnswerというオープンソースのQ&Aソフト利用して運営しています。

日本ではあまり馴染みのないQuestion2Answerですが、海外ではさまざまなQ&Aサイトに利用されています。
人気なだけあってスパムも多く、対策をしないと大変なことになります。

このページではQuestion2Answerへの導入方法と、合わせてreCAPTCHAについても解説します。


reCAPTCHAとは

reCAPTCHA(リキャプチャ)とは何かについて解説します。

まずCAPTCHA(キャプチャ)とは、相手がコンピュータでないことを確認するための仕組みです。
スパム対策に用いられ、難読化した文字を入力したり、簡単な計算をさせたりと、さまざまな方法がとられます。

reCAPTCHAにはもう一つの機能があります。

書籍の文字を自動で電子化するOCRというソフトがあります。
OCRソフトは万能ではなく、読みにくく加工された文字や、スキャン時に曲がってしまったりと、正確に文字が読み取れないことがあります。

この「OCRで読みにくい文字」を「難読化した文字を解析する」という作業に利用したのがreCAPTCHAです。

reCAPTCHAを利用することで、OCRソフトを補完し、同時にスパム対策にもなるというWin-Winの関係です。

ただ、解読用のAIの発達により、99.8%の文字が解読されてしまいます。そこで意図的に文字を歪めており、人間であっても認識できないレベルにまで難読化が進んでいます。
ほとんどの文字が解読されて、人間すら認識できない」となると、本来の用途であるスパム対策としては用をなしていません。

そこで現在では類似する概念の画像を選択させる(標識の画像を全て選ぶ)など、より高度な処理で人間を認識しています。

ちなみに現在reCAPTCHAはGoogleが買収して管理しています。


reCAPTCHAの登録

まずはreCAPTCHAの登録を済ませます。

以下のURLで登録ができます。
https://www.google.com/recaptcha/admin#list

既に登録しているURLがあれば、上にリスト表示されます。
新規に登録する場合は「Register a new site」という項目に必要事項を入力します。

1.Label(識別するための名前)

1つのサイトで異なるタイプのreCAPTCHAを利用しないのであれば、URLで問題ないと思います。
例)example.com

Choose the type of reCAPTCHA(reCAPTCHAのタイプ)

通常reCAPTCHA V2で問題ないと思います。それぞれ以下のような特徴を持っています。

reCAPTCHA V2

ロボットではありません」というチェックボックスにチェックを入れてもらうタイプ。複数回使用すると人間にしか識別できない画像を選択するポップアップが出てきます。
スパム対策としては最も強度が高いですが、画像を選択するのが非常に面倒なため、1人で何度も実行するようなものには向いていません。通常であれば1度だけ利用するような、例えばユーザー登録などに設置するのに向いています。

invisible reCaptcha

チェックボックスや画像認証を行わずに、バックグラウンドで人間かどうかを判断する仕組み。どこからアクセスして、表示から何秒でクリックしたかなど、複合的な要素で判断します。ユーザーによるアクションを必要としないため、入力時のストレスが一切ありません。
ただし2017年3月に正式リリースされたばかりの技術のため、どれくらいの精度があるのかは不明です。

reCAPTCHA Android

Android端末の情報を利用して認証する方法です。

Domains(reCAPTCHAを利用するドメイン)

例)example.com

あとはAccept the reCAPTCHA Terms of Service.と、Choose the type of reCAPTCHAにチェック。

Registerボタン」で登録が完了です。


Question2Answerで設定する

必要なのは「Adding reCAPTCHA to your site」という項目にある、「Site key」と「Secret key」です。

続いてQuestion2Answerの設定画面で、管理からプラグインを選択。
reCAPTCHA v2.0のオプションをクリックします。

reCAPTCHA public keySite keyreCAPTCHA private keySecret keyを入力します。
入力できたら「Save Changes」でオプションを設定します。

迷惑設定

Question2Answerで、管理から迷惑設定を開きreCAPTCHAを有効にする項目を選択します。
例えば以下のような項目。

通常であればこれで設定完了ですが。
日本語版のQuestion2Answerでは翻訳が多少古いようで、「表示されている2つの単語を続けて入力してください。」と表示されてしまいます。
そこでQuestion2Answerのディレクトリにある「qa-lang\ja\qa-lang-misc.php」を開いて翻訳ファイルを編集します。

'captcha_label' => '表示されている2つの単語を続けて入力してください。:',

上の項目を

'captcha_label' => 'スパム対策です。チェックをお願いします:',

このように変更します。(文言はreCAPTCHAのタイプによって適宜、変更してください。)

すると迷惑設定で設定した項目を入力時にreCAPTCHA ウィジェットが表示されます。

以上でreCAPTCHAをQuestion2Answerへ導入することができました。