スパム対策

スパム対策に有用な reCAPTCHA を Drupal 8 で導入する

こんにちは。プログラマーの山中です。

今回は reCAPTCHA モジュールの紹介から導入までを紹介しています。 reCAPTCHA は前回の スパム対策用モジュール Honeypot の使い方 に引き続き、スパム対策モジュールの記事となります。

フォーム入力画面において次のようなものを目にしたことがある方も多いのではないでしょうか?

reCAPTCHA

まずは reCAPTCHA について簡単に説明し、そのあと Drupal での導入方法をご説明いたします。

reCAPTCHA 概要

reCAPTCHA は Google 社によって提供されているスパム対策用の無料のサービスです。 これまでの CAPTCHA や reCAPTCHA v1 によるスパム対策では、文字が見づらい画像に表示されたテキストなどを入力をすることでスパムか人間かを判断していましたが、reCAPTCHA v2 では 1クリックだけで人間かスパムかを判断できるようになりました。

1クリックだけでスパムかどうかを判断する仕組みについて、詳細は明かされていませんが、 IP アドレスや Cookie が他の Web サイトを閲覧した際に(恐らく Google に対して)友好的であるかどうかという証拠を残しているということと、カーソルがチェックボックスに近づいた際のマウスの動きから判断しているとのことです。

機能については、実際の機能を試したほうがわかりやすいと思いますので、下記より確認ください。

使用デモはこちら

もし、 reCAPTCHA が人間かどうか判断できなかったときは、下記のキャプチャ画像のように写真を使った認証を求められます。 タイル形式に分割された写真の中から自動車や道路標識に当たる部分を選択する、あるいはお店やアパートの写真を選択する、といった内容の認証方法ですが、失敗し続けると「該当する画像をすべて選択してください。」や「もう一度お試しください。」といったメッセージが表示されて、延々と写真による認証を求められ、フォームのデータを送信することができない状態になります。

reCAPTCHA で認証がダメだったときの表示

Drupal では10万を越えるサイトが reCAPTCHA モジュールを導入しています。Drupal 8 では1万を越えるサイトが導入しており、コントリビュートモジュール内でトップ50位以内の利用サイト数を誇ります(2017年09月15日現在)。 Wordpress や Joomla! でも専用のモジュールがあるようですし、reCAPTCHA の人気ぶりが伺えます。 reCAPTCHA がさまざまな Web サイト上でよく使用されるようになったのは恐らく下記の理由によるものでしょう。

  1. 無料で使えること
  2. 導入が簡単であること
  3. ユーザーのストレスが少ないこと(テキスト入力するタイプの CAPTCHA と比較して)
  4. Google が提供していること

reCAPTCHA を使用するには Google のアカウントでログインした後に site keysecret key の2つのAPIキーを発行する必要があります。 site key は Web サイト上で reCAPTCHA のサービスを呼び出すために使用され、 secret key は Web サイトと reCAPTCHA サーバ間の通信を許可し、通信を検証するために使用されます。

APIの発行にはいくつかの手順を必要としますので、その手順を reCAPTCHA モジュールの導入と一緒に見ていきましょう。

reCAPTCHA モジュールの導入方法

Google での reCAPTCHA に関する作業

Developer's Guide を見ると難しそうに思えますが、 Drupal で使用する分には数分のブラウザの操作だけで済みますので導入は簡単です。

Register a new site で reCAPTCHA の API キーを発行

まずは API キー発行フォーム にアクセスして、Google アカウントでログインし、 Register a new site の入力項目を埋めていきます。

Register a new site

  • Label : 自分にとってわかりやすい名前(サイト名などでOKです)
  • Choose the type of reCAPTCHA : reCAPTCHA V2 を選択
  • Domains : サイトのドメインを入力します
  • Accept the reCAPTCHA Terms of Service. : reCAPTCHA Terms of Service を読んでチェックを入れましょう

入力が済んだら Register をクリックします。

発行した reCAPTCHA の API キーを控えておく

するとすぐに API キーが発行されますので、 Site keySecret key を控えておきましょう。

APIキーが発行されたよ

Google 側の作業はこれでおしまい。 Drupal での設定に移りましょう。

Drupal での reCAPTCHA モジュールの 設定

reCAPTCHA モジュールの設定

Drupal 側ではまず、 CAPTCHA モジュールに依存するため、CAPTCHA モジュールと一緒に Drupal にインストールします。 インストールが完了したら下記ページにアクセスします。

ホーム » 管理 » 環境設定 » ユーザー » CAPTCHAの設定 » reCAPTCHA
パス: admin/config/people/captcha/recaptcha

先ほど控えた Site keySecret key を該当するフィールドに入力して保存します。

CAPTCHA モジュールの設定

次に、CAPTCHA モジュールのデフォルトの設問形式を変更します。下記ページにアクセスします。

ホーム » 管理 » 環境設定 » ユーザー » CAPTCHAの設定
パス: admin/config/people/captcha

フォーム保護 の中の 標準の設問形式 を reCAPTCHA(モジュール recaptcha 提供) に変更して保存します。

Drupal 上で reCAPCHA を設置するフォームを選択する

最後に、reCAPTCHA を設置するフォームを選択しましょう。下記ページにアクセスします。

ホーム » 管理 » 環境設定 » ユーザー » CAPTCHAの設定 » CAPTCHAポイント
パス: admin/config/people/captcha/captcha-points

デフォルトの状態ではすべてのフォームで無効な状態になっていますので、 有効リンク をクリックして、次の画面でも 有効ボタン をクリックします(キャプチャ画像内ではログインフォームを選択しています)。

実際のフォームを確認してみると、表示されていることが確認できました。

これで導入は完了です。

最後に

いかがでしたでしょうか。実際にこの Umi->d でも導入していますが、基本的には1クリック追加するだけで承認されますのでユーザー側のストレスが少なく済みます。 少ない手順で簡単に導入でき、高い効果のスパム対策をすることができますので、ぜひ導入してみてください。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。

スパム対策用モジュール Honeypot の使い方

こんにちは。プログラマーの山中です。

すっかり稲刈りのシーズンとなりましたが皆様いかがお過ごしでしょうか。この時期は風邪をひきやすいので、今年は温かいお風呂にしっかり浸かる、ちゃんと栄養のあるものを食べる、などをして対策しております。幸い、弊社スタッフに風邪をひいている者はおりませんが、みなさまお気をつけくださいね。

さて、今回はスパム対策用のモジュール Honeypot モジュールのご紹介です。

Honeypot モジュール 概要

Honeypot モジュールでは、ユーザーには見えない隠しフィールドを用意して、スパムにわざと入力させることでスパム判定を行っており(後ほど図で説明します)、さらに入力から送信までが早すぎたらスパムと判定する(デフォルトでは5秒に設定されていますが、この秒数は管理画面から変更可能です)、と2つのアプローチでスパム対策を行っています。この2つの方法の大きな特徴としては ユーザーが特別な動作をすることなくスパム対策を行えること でしょう。

弊社では スパム対策として Mollom モジュール( 弊社紹介記事 ) を使用することが多かったのですが、 Mollom のサービスは 2018年4月2日 からサポートと更新が停止され、その代わりとして Honeypot モジュールや reCaptcha モジュールの使用が推奨されており、 CAPTCHA と合わせて今後より多く導入されるモジュールのひとつになりそうです。

参考リンク: Mollom End-of-Life Announcement | Mollom

Honeypot の仕組み

たとえば、こちらの画像は Drupal のユーザー登録フォームとHTMLソースコードを一緒に表示したキャプチャ画像ですが、 url-textfield のクラスを持つフィールドがインラインスタイルシートで非表示にされているのがわかりますでしょうか?

Honeypot の仕組み

こうすることで人間がブラウザからページを表示する際には見えなくなるのですが、通常スパム bot はスタイルシートは解析せずに HTML のみを解析し、入力フォームがあれば全て入力を試そうとすることが多いのでスパムだけがひっかかってしまう、という仕組みなんですね。

ちなみに、ブラウザ上で Honeypot で生成された隠しフィールドに意図的に入力して送信すると、下記のエラーメッセージが出て送信することができませんでした。

Honeypot 隠しフィールドに入力して送信すると

では次は導入方法です。

Honeypot モジュール の導入方法

Honeypot モジュールをインストール後、下記ページにアクセスします。

ホーム » 管理 » 環境設定 » コンテンツ作成 » Honeypot configuration
パス: admin/config/content/honeypot

Honeypot の設定画像

ここで有効にするフォームを選択して Honeypot を有効化しましょう。

なお、この画面では下記の設定を行うことができます。

  • 全てのフォームで Honeypot を有効にする
  • スパム判定され、ブロックされた送信をログに送信
  • Honeypot で使用する要素名
    • デフォルトでは url になっているため、Honeypot を使用するフォームで url というフォーム部品を作成する場合は名前が被らないように変更する必要があります。
  • 時間制限
    • 0秒に設定すると無効化されます。 ページ内にこの機能がついたフォームがある場合はページキャッシュが無効になります
  • Honeypot を有効にするフォーム
    • ユーザー登録フォーム
    • ユーザーパスワードリセットフォーム
    • Contact フォーム
    • ユーザーごとの Contact フォーム
    • Node の コンテンツタイプごとのフォーム
    • コメントフォーム

Webform で Honeypot を有効化する

全ての Webform に対して Honeypot を有効化する場合は下記ページにアクセスします。

ホーム » 管理 » サイト構築 » ウェブフォーム » Webforms: Settings » Webforms: Third party settings
パス: admin/structure/webform/settings/third-party

Webform で Honeypot を設定する画面

ここでは下記の設定を行うことができます。

  • Honeypot の使用(隠しフィールドの設置)
  • 時間制限の追加

なお、個別の Webform モジュールでも下記ページから個別に設定することができます。設定できる項目は Webform 全体の設定画面と一緒です。(*** は個別の Webform の システム内部名称です)

パス: admin/structure/webform/manage/***/third-party-settings

次にカスタムモジュールなどで作成したフォームへの Honeypot の追加方法も記述します。

独自のフォームへの Honeypot の導入

独自のフォームや、独自のモジュールの hook_form_alter を使用してフォームに追加する場合、 フォームビルダー関数内(または hook_form_alter 内)で下記関数を呼び出します。

  honeypot_add_form_protection($form, $form_state,['honeypot', 'time_restriction']);

Honeypot の使用、あるいは時間制限の使用の 有効/無効 を設定するには第3引数の配列にそれぞれの単語を指定すれば OK です。

最後に

ユーザーにストレスを与えることなくスパム対策ができる Honeypot モジュール。

この Umi->d のサイトにも運用の途中で Honeypot モジュールを導入しましたが、ほとんどのスパムを防ぐことができるようになりましたし、設定方法も簡単なので、とりあえず導入して間違いないモジュールのひとつかと思います。ぜひインストールしてみてください。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。

Drupal にスパム対策のモジュール Mollom をインストールする方法

Mollom は2018年4月2日から提供されなくなることが決定したので、利用しないでください。これからは reCAPTCHA の利用が勧められています。

こんにちは、大野です。ゴールデンウィークで滋賀に帰ってきました。帰ったついでに久しぶりにバイクに乗りましたが、やっぱりこの時期が一番ですね。寒すぎず暑すぎず本当に丁度良いです。

さて、皆さんはどんなスパム対策をされているでしょうか。Drupal で作られたサイトは世界的に見るとかなりの数があるため、残念ながらスパムボットも格好の標的となっています。スパム対策をしていない Drupal サイトはすぐにスパム被害にあってしまいますので、公のサイトであれば何らかのスパム対策は必須です。

Drupal のスパム対策用のモジュールとして有名なのは CAPTCHAHoneypot などがあげられますが、今回はスパム対策モジュールの中でもスパムの判定精度が高く、ユーザーの負担にならない Mollom と言うサービスとモジュールを紹介します。

Mollom は Drupal の創始者である Dries 氏が創設した Acquia 社が展開しているスパム対策サービスです。Mollom の仕組みは簡単で、第三者から何らかの情報をウェブサイト上に投稿する際に、その内容を一旦 Mollom のサーバーに送信して投稿された内容と送信者の IP アドレスを Mollom のデータベースと照らしあわせ、スパムかどうか判断するものです。スパムとして判断された投稿は未公開状態にしたり削除するなど、挙動は設定で変更することができます。スパム判断の精度がとても優秀で、弊社でも Mollom を導入してからスパムが投稿される事がほぼ無くなりました。Mollom は有償のサービスですが、1日に50件までの投稿(スパムを除く)であれば無料のプランで使用することができるため、一般的なコーポレートサイトやブログなら事足りると思います。

Mollom を利用するには API キーを取得して設定する必要があり、サービスの利用がやや難し目なので、今回は Drupal 初心者の型を対象に Mollom のサイトに登録する方法と Mollom モジュールのインストール方法を解説します。なお、今回は Drupal 7 をベースとした解説ですが、Drupal 8 にも対応した安定版の Mollom もリリースされています。

スパムの反対はハム!

先に Mollom で使用される用語について説明しておきます。私は調べるまでしらなかったのですが、Mollom 上ではスパムでは無い投稿を Ham (ハム)と言うそうです。これは食品の SPAM が Spiced Ham の略だとされていることから、スパイスが効いていないもの = 通常のハム(スパムじゃない投稿)と言うことみたいです。SPAM が一般的では無い日本人にはなんのこっちゃですね(笑)

Mollom に登録

Mollom のサイト にアクセスしてください。

プラン選択ページ

プランの変更は途中からできるので一先ずは Mollom Free のプランを選択しましょう。

ユーザー登録フォームが表示されるので必要な情報を入力します。

ユーザー登録フォーム

  • "Mollom may contact me via e-mail regarding products and services." は新製品やサービスの案内をメールで受け取るかの選択です。
  • "Send me a weekly summary of Mollom's performance on my sites" は Mollom のパフォーマンスをメールで通知してくれる選択です。

最後に Create new account ボタンを押してください。記入したメールアドレス宛に以下の様な確認用のメールが届きますので、そのリンクをクリックして Mollom のサイトへログインします。

Mollom からのメール

Mollom のログインページが表示されるので、Login ボタンを押しましょう。

Mollom ログインページ

アカウントの編集画面が表示されます。このタイミングでしかパスワード変更できないので、パスワードを必ず入力して Save ボタンを押してください。

Mollom ログインページ

サイト情報を登録する画面になります。Product details は先程設定した無料プランになっているはずなので、その下にある Site details 内の設定から解説します。

Primary site URL

Mollom を使用したいサイトの URL を入力します。まだ URL が決まっていない場合は取得予定の URL を入力してください。この URL は後で変更することができます。

Site type

サイトの使用用途に合わせて項目を選択します。

  • Personal site: 個人用サイト
  • Company site: 事業用サイト
  • Non-profit site: 非営利目的のサイト

This site is built or maintained for a customer

登録するサイトが顧客用のサイトであれば 「This site is built or maintained for a customer」にチェックを入れてください。

Expected languages

サイト上で使用される言語を設定します。全ての投稿が選択した言語に制限されます。この設定は Mollom のテキスト解析に使用されます。ユーザーが他の言語で投稿する可能性がある場合は未選択の状態にしてください。

Site software

サイトで使用するソフトウェアを選択します。Mollom は WordPress や Joomla! などにも対応していますが、今回は Drupal を選択します。

最後に一番下にある term of services のサービス利用規約を読み、チェックボックスにチェックを入れて Save ボタンを押してください。

Mollom サイト登録画面

確認用の画面が表示されるので、Complete subscription のボタンを押してださい。

サイト登録確認画面

API キーの取得

ユーザー登録が終わるとサイトの管理画面になります。Mollom を使用するのに必要な API キーを取得する必要があるので View keys のリンクを表示してください。

サイト管理画面

次のページで表示される Public key と Private key は Drupal 上の設定画面で使用しますので控えておいてください。

API キーの画面

Drupal に Mollom モジュールをインストール

ここから Drupal 側の設定です。最初に Mollom モジュールをインストールしましょう。モジュールのインストール手順についてはこちらの記事を参考にしてください。

API キーの設定

管理メニューの 環境設定 > Mollom コンテンツモデレーション (admin/config/content/mollom) ページヘ行き、ページ右上にある設定タブを開きます。

Drupal Mollom 設定ページ

ページ上部に Mollom API Key のフィールドセットがありますので、それをクリックして展開し、先ほど Mollom のサイト上で取得した API キーをコピー&ペーストします。日本語化された Drupal をお使いの場合は項目名が翻訳されていてわかりにくいのですが、「公開鍵」に入れる内容は Public key、「秘密鍵」に入れる内容は Secret key となります。キーを入力したら最後に「設定を保存」ボタンを押してください。

Mollom で保護するフォームの設定

殆どの運用では記事に対するコメントのスパムが問題となりますので、今回はコメントフォームを Mollom の対象とします。

管理メニューの 環境設定 > Mollom コンテンツモデレーション (admin/config/content/mollom) を開いてください。このページでは Mollom を使って保護したいフォームを設定するページです。ページ内のフォームの追加リンクを開いてください。

フォームの追加

今回は例として Article のコメントフォームを対象とします。「コメント: Article コメントフォーム」を選択し、次へを押します。

コメントフォームを選択

Mollom のフォームごとの設定画面となります。2016年4月現在では内容があまり翻訳されていませんね。

以下に各項目の設定を簡単に解説します。

  • Protection mode: 保護モード
    • Text analysys: 投稿されたテキストを解析します。通常はこちらを選択してください。
    • CAPTCHA only: テキスト解析をせずに CAPTCHA のみを表示させます。極端にテキストの入力項目が少ないフォームの場合にのみこちらを選択します。
  • Text analysis checks: テキスト解析でチェックするもの
    • Spam: スパムであるか
    • Profanity: 冒涜するような言葉のチェックを行います。日本語には対応してないかもしれません
  • Text fields to analyze: 解析するテキストフィールド
  • Text analysis strictness: テキスト解析の厳格さ
    • ノーマル: 通常はこちらで良いでしょう
    • Strict: 判定が厳しくなります。スパムが通り抜けてくるようでしたらこちらを選択しても良いかもしれません。
    • Relaxed: 判定がゆるくなります
  • When text analysis is unsure: テキスト解析が不明瞭な場合の動作
    • Show a CAPTCHA: CAPTCHA を表示
    • Retain the post for manual moderation: 投稿を保持してマニュアルでモデレーションを行ないます。コメントが未承認の状態になります
    • Accept the post: 投稿を受け入れる
  • When text analysis identifies spam: テキスト解析でスパムと識別された場合
    • Discard the post: 投稿を破棄。通常はこちらを選択してください
    • Retain the post for manual moderation: 投稿を保持してマニュアルでモデレーションを行ないます

最後に保存ボタンを押して完了です。

スパム対策の効果の確認

設定直後にスパムボットが都合よく来るわけではないと思いますので、少し時間を置いてから Mollom のレポートページ (admin/config/content/mollom/statistics) を見てみましょう。おそらく以下のようなグラフが表示されるようになっていると思います。

Mollom のレポートページ

いかがでしたでしょうか。導入に少し手間は掛かりますが、かなりの効果がありますので是非利用してみてください。

コメントを追加

プレーンテキスト

  • HTMLタグは利用できません。
  • 行と段落は自動的に折り返されます。
  • ウェブページのアドレスとメールアドレスは自動的にリンクに変換されます。