WordPress

WordPressのコンタクトフォームからのスパムメール対策 -honey pot-

WordPressに限りませんが、運営の主なストレスがスパム対策。コメントからのスパムを始め、多いのは問い合わせのフォームによるスパムメールではないでしょうか。

WordPressのプラグインでも大人気のContact Form 7。特になんの対策もせずデフォルトのまま運営されていれば、ほぼ間違いなくスパムメールの対象になることでしょう。

イタチごっこが続いているスパム対策でしたが、ロボットによるスパム行為はほとんど防げたスパムメール対策の仕方をご紹介します。

ハニーポットの設置

Contact Form 7(以下、 CF7 )の使用者に限定されますが、 CF7はハニーポットのプラグイン Contact Form 7 Honeypot が出ています。

ハニーポットとは

ハニーポット (Honeypot)とは、スパムや不正アクセスが入ってくることを前提に作られたシステムのことです。

スパムボットの大半は「フォーム内の項目に自動的入力する」というプログラムで動いています。
ハニーポットでの対策というのは、スパムロボット向けにページには表示していない入力項目を設置しておき、そこに入力したらスパムとして判定するという仕組みです。

ハニーポット設置方法

まずは、プラグインの入手から。以下からプラグインを入手するか、ダッシュボード内のプラグインページから検索する時の名前は「Contact Form 7 Honeypot」です。

Contact Form 7 Honeypot プラグインを有効化した後、contact form 7の問い合わせページを見てみると、[ハニーポット]というフォームタグが追加されています。

CF7でフォームタグ[ハニーポット]が追加されている
CF7でフォームタグ[ハニーポット]が追加されている

そのままクリックすると、英語で表示されますがそこまで難しい英語ではないので解読できるかと思います。

英語で表示されているが、そこまで難しくない

名前の部分が[honeypot-数字]になっていますが、botにアピールするために[email]や[website]などに変更すると良いようです。

CF7のメールアドレスのデフォルト名が[your-email]なので、 ハニーポットをyour-email]に変更しました。
メールアドレスの項目の方は[your-emailaddress]に変更しています。

[honeypot your-email move-inline-css:true]を追加

最終的なコードは[honeypot your-email move-inline-css:true]となりました。

最終サンプル コード

表示画面

Contact Form7に入れたテンプレートコード

<p>お名前 (必須)<br />
    [text* your-name] </p>

<p>メールアドレス (必須)<br />
    [honeypot your-email move-inline-css:true][email* your-emailaddress] </p>

<p>題名<br />
    [text your-subject] </p>

<p>メッセージ本文<br />
    [textarea your-message] </p>

<p>[submit "送信"]</p>

フォームコード

<p>メールアドレス (必須)<br>
    <span id="wpcf7-5d480aba3616c" class="wpcf7-form-control-wrap your-email-wrap">
        <label class="hp-message">このフィールドは空のままにしてください。</label>
        <input class="wpcf7-form-control wpcf7-text" type="text" name="your-email" value="" size="40" tabindex="-1" autocomplete="nope">
    </span>
    <span class="wpcf7-form-control-wrap your-emailaddress">
        <input type="email" name="your-emailaddress" value="" size="40" class="wpcf7-form-control wpcf7-text wpcf7-email wpcf7-validates-as-required wpcf7-validates-as-email" aria-required="true" aria-invalid="false">
    </span> 
</p>

フォーム部分のHTMLはこのような感じになっていました。name部分にフォームタグが入るまでは、CF7の挙動と同じ。

type="text"のままemailの項目として使うのは少し違和感がありますが、どうなんだろう。