OXY NOTES

Question2Answerでスパムによるユーザー登録に悩んだら「Stop Spam Captcha」を使おう

私の管理しているアクアリウムWiki Q&AはQuestion2Answerを利用しています。
そのサイトでbotによるユーザー登録が行われるようになり、対策をしようというのがこのページの趣旨です。

Question2Answerには予めスパム予防のプラグインが用意されています。GoogleのreCAPTCHAを利用したもので、ほとんどのスパムを撃退できます。しかし残念ながら万能ではありません。スパムとの戦いはイタチごっこです。対策とbotは互いにしのぎを削り合い、現在では人間に解くのが困難な問題も突破します。

そうした高度なbotは利用者の多いCMSを標的にします。スパム対策を突破するために労力を割いても利益が出るという判断なのでしょう。
ただ、一般のCMS利用者たる我々が取るべき対策は意外と単純です。「サイト独自のスパム対策を追加すること」私の運営している小規模なサイトにスパムを掲載するメリットはごくわずかです。そのわずかなメリットのためにプログラムを書き換えるのはスパマーにとって割りに合わない仕事です。

ということでサイト独自のスパム対策を追加します。
ありがたいことに既にこのような需要を満たす外部プラグインが用意されています。それが今回紹介する「Stop Spam Captcha」というプラグインです。


「Stop Spam Captcha」の特徴

Stop Spam Captcha」は複数のスパム対策をまとめたプラグインです。主な機能は独自の設問の追加と、特定のワードをフラグにしたり、ハニーポット(honeypot)などのスパム対策です。

詳しくはgithubで解説されています。詳しく知りたい方は公式の解説をご覧ください。


「Stop Spam Captcha」のインストール方法

githubの解説にある通りとても簡単です。

1.まずはgithubからZIPファイルをダウンロード。

2.解凍したフォルダごとQuestion2Answerの「qa-pluginディレクトリ」へコピー。

3.管理ユーザーでログインして、「管理 > プラグイン」へアクセス。

名前のないプラグイン」の「…/qa-plugin/q2apro-stop-spam-master/」という項目のオプションをクリック。(プラグイン名が正しく取得できていない原因は本体のバージョンが古いのか、プラグインの仕様が古いのか不明。ただプラグインの動作に問題はありません。)

4.プラグインの各種設定を行う

設定項目の意味はそれぞれ以下の通りです。

Captcha Question 独自に追加する設問の文言(総当たり攻撃ですぐに判明するような簡単な答えの設問は避けたほうが無難。答えに日本語が含まれればまず突破されない)
Answer option 1 正しい答え
Answer option 2 正しい答え2(こちらは空欄でも可)
Error message 間違った場合に表示される文言
List domains (or part of their names) that prevent user registration ユーザー登録を拒否するドメインのリスト(デフォルトで登録されているのはスパマー御用達のサービス、追記はカンマ区切り)
Spam words that prevent the posting to be submitted (separate with comma) 投稿を拒否するドメインのリスト(カンマ区切り)
Disallow certain languages here, separate them by comma. Available are: Han,Hangul,Hebrew,Arabic,Cyrillic,Greek,Khmer. Note: “Han” stands for Chinese. 特定の言語を拒否する(おそらく文字コードで判別していると思われる。ちなみに用意されている言語での拒否しかできないようです。)
Notify admin by email if this mentioning is found 特定のワードに言及があった場合に管理者に通知する。(よくあるセールスワードなんかを登録しておくと便利かも)
Number of allowed links per post 投稿に指定のリンク数以上ある場合はスパム認定
Moderate posts (answers, comments) with links. Will send them to the moderate queue リンク付きの投稿をキューに入れる。(管理者の許可制にする)
Remove email addresses from posts. Example: spam@forum.com becomes *Emails are not allowed* 投稿からメールアドレスを削除する(メールアドレスは自動で*Emails are not allowed*という文言に置き換えられる)
Remove too many linebreaks and merge them into one. Also remove empty linebreaks in the post end. 連続した改行を一つにまとめる(割と日本語とは相性が悪いのでチェック非推奨)
Prevent user with same IP from voting for his own posts and selecting his answers as best. 投稿者と同じIPで回答できないようにする。ベストアンサーにも選べないようにする。
Do not allow guests without IP address to post in forum. IPが取得できないユーザーの投稿を拒否

設定が完了したら「変更を保存」ボタンをクリック。

5.「管理 > 迷惑対策」でキャプチャモジュール:から「Stop Spam Captcha」を選択してキャプチャ表示を有効にしたい項目をチェックして「オプションを保存」をクリック。

以上で設定は完了です。

「Stop Spam Captcha」の動作確認

では動作確認を行ってみましょう。

ユーザー登録の画面を開くと以下のような項目が追加されています。

今回はあえて間違った文言を入力して「登録」ボタンをクリックします。すると以下のように「アンチスパム認証を正しく入力してください。」と表示されます。

これで動作確認は完了です。

ものは試しにbotと同じようにハニーポットに引っかかってみます。

Chromeの検証で以下の項目のCSSを変更します。

<input type="checkbox" name="response_field" id="response_field">
#response_field {
    display: none;
}

非表示の設定をコメントアウト。

#response_field {
    /* display: none; */
}

するとチェック項目が表示されます。

通常のbotはソースコードで判定しているため、response_fieldという項目をチェックします。ソース上ではCSSで見えないようにしていることは判定できないため、この項目をチェックするのはbotだけというわけです。

試しに全ての項目を正しく入力した状態で、チェックも入れて登録してみます。

すると正しい答えを入力したにもかかわらず「アンチスパム認証を正しく入力してください。」という文言が表示されました。
ハニーポットも正しく動作していることが確認できました。

気になる方は他の機能も正しく動作しているか調べてみてください。


以上「Stop Spam Captcha」のインストールと設定方法でした。
私の管理しているサイトでは以上の設定を行って以来botによる新規登録は1件もありません。効果は確かにあるようです。