どうも、わいです。
WordPressのセキュリティ対策をおろそかにしていると、たまに外国人から大量に迷惑・スパムメールが来ることがあります。
中には、数分に1回のペースで送られてくるケースもあり、大切なメールが届いているのに気付かなくなったり
誤ってメール内のリンクを押してしまうと、ウイルスに感染してしまったりします。
今回は、お問い合わせフォームからこのような悪質なメールが送られてこないようにするための設定を
コーディングを利用した方法と、利用しない方法に分けてご紹介します。
コーディングを利用した方法はfunctions.phpに記載する方法、コーディングを利用しない方法はGoogle reCAPTCHAを利用した方法です。
しかし、この記事を読んでいる人の中にはコーディングができない人もいるかと思いますので
そういった人向けに、まずはGoogle reCAPTCHAを利用した対策方法から紹介していこうと思います。
1. Google reCAPTCHA(リキャプチャ)を導入する
もしこの記事を読んでいるあなたが、WordPressのセキュリティに疎かったとしても
プロに任せる形でもいいので、最低でもGoogle reCAPTCHAの設定は必ずしておきましょう。
設定手順は以下の通りです。
①Googleアカウントを利用してログインする
Google reCAPTCHAを利用するには、Googleアカウントでログインする必要があります。
reCAPTCHA設定の管理をしたいアカウントでログインしましょう(リンク先は、下の「reCAPTCHA管理コンソール」という部分に貼っておきます)。
②サイトキー、シークレットキーを取得する
Googleアカウントでログインしたら、reCAPTCHA管理コンソールからサイトキーとシークレットキーを取得します。
ラベルには、わかりやすく自分のブログサイトなどのドメイン名を入れると良いです。
reCAPTCHAタイプは、より最新版のv3を選択。
Google Cloud Platformにも、僕は「ドメイン名(.comや.jpなどの部分を抜いたバージョン)+ Project」や「名前 + Project」のような名称を設定しています。
ドメイン名も設定しましょう。

すると、サイトキーとシークレットキーが発行されますので、コピーしましょう。

コピーしたら、Contact Form 7の場合は「お問い合わせ」>「インテグレーション」で実装することができます。

reCAPTCHAを選択します。

先ほど取得したサイトキーとシークレットキーを貼り付けます(初めて設定する場合は、「変更を保存」というボタンが出ているはずです)。

これで設定は完了です。お疲れ様でした!
2. コーディングで対策する
続いては、コーディングができる人向けの方法です。
自分のWordPressサイトやブログにアクセスをし、以下のコードを
外観>テーマファイルエディター>functions.phpにて記述してください(コピペOK)。
※ただし、functions.phpでエラーが出たら最悪管理画面にログインできなくなってしまう可能性がありますので
必ずfunctions.phpファイルのバックアップを取ってから記述をすることをお勧めします。
// お問い合わせフォームのスパム対策用コード
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);
function wpcf7_validation_textarea_hiragana($result, $tag)
{
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
if ($value !== '' &&; !preg_match('/[ぁ-ん]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name =>; '送信できません。');
}
return $result;
}
こちらは、Contact Form 7の問い合わせ内容に日本語が書かれていなければ送信ボタンを押せなくなるような処理のコードです。
add_filter('wpcf7_validate_textarea', 'wpcf7_validation_textarea_hiragana', 10, 2);
第3引数の10は優先度を指し、10に設定しておくと1番最初に処理されます。
第4引数の2は、関数が取る引数の数を表します。
次の行のコードは、1行目とほぼ一緒ですが、第1引数の最後に「*」がついてます。
これはお問い合わせ時の必須項目を示し、必須項目についても1行目と同じ処理を行うことを意味します。
add_filter('wpcf7_validate_textarea*', 'wpcf7_validation_textarea_hiragana', 10, 2);
function wpcf7_validation_textarea_hiragana($result, $tag)
{
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
if ($value !== '' &&; !preg_match('/[ぁ-ん]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name => '送信できません。');
}
return $result;
}
第1引数に$result, 第2引数に$tagを取った、「wpcf7_validation_textarea_hiragana」という名称をつけた関数の内容を示しています。
「wpcf7_validation_textarea_hiragana」の関数の中身を、分けて見ていくと…
$name = $tag['name'];
$value = (isset($_POST[$name])) ? (string) $_POST[$name] : '';
まずは、名前欄についての記述です。
1行目は、フォームフィールドの名前(name属性の値)を取得し
2行目に関しては、POSTデータに該当フィールドが存在するかチェックして、存在する場合には文字列型に変換して$valueに代入します。
存在しない場合は、空の文字列を代入。
if ($value !== '' &&; !preg_match('/[ぁ-ん]/u', $value)) {
$result['valid'] = false;
$result['reason'] = array($name => '送信できません。');
}
return $result;
もし、お問い合わせ内容が空でない、かつ「ぁ」〜「ん」までのひらがながない場合は、フォーム送信が阻止されるので送信ボタンで送信することができませんし、「送信できません」というエラーメッセージも表示されるということです。
よって、そもそも内容に何も書かれていないか、入力内容に1文字もひらがながない場合はお問い合わせを送れないので
英語だけの文章で書かれた迷惑メールを送信できなくなる処理になるわけです。
最後に
ということで、今回は知らない外国人からスパムメールや迷惑メールが大量にくるのを防ぐプラグインやコーディングを紹介しました。
先述しましたが、コーディングをやったことがない人や苦手意識がある人でも
最低でも、Google reCAPTCHAの導入だけは実施して欲しいと思います。
このブログでは、Web制作に関する話題やコーディング、WordPressなどに役立つ情報を発信しているので
次回の記事もぜひ見てくださいね。

記事をSNSで拡散すると、有益な投稿をするアカウントだと思われ
フォロー数やいいね数が増えるかもしれないよ!
コメント