2025年年初から当ブログは新しい「WordPress」とテーマに移行。
これに伴い、問い合わせフォームも新しくなったことで、スパムメールが発生しました。
今回、問い合わせフォームから届くスパムメールの対策を記します。
レンタルサーバー「XREA」のスパムフィルター
昨年までのブログの問い合わせメールは「Gmail」経由にしていました。
優秀な「Gmail」のスパム認定のおかげでブログのスパムメールはゼロでした。
私は現在「Google」のサービスをなるべく使わない方針にしたので、この機会にスパム対策も「Google」に依存するのを止めました。
ただ、スパム対策をしない場合のスパムメールの現状はどうなのか知りたくて、リニューアル当初はあえて問い合わせフォームにスパム対策をしませんでした。
名もないブログなのでスパムは大したことなく対策も必要ないかもとの期待もありました。
しかし、オープン後徐々にスパムメールが増え、1日に数十件になってきました。
やはり、無防備での運用は難しいと判断し、スパムメール対策に取り掛かりました。
まず最初に対策したのはレンタルサーバー側でのスパムフィルターでの対策です。
私が利用しているレンタルサーバー「XREA」には「ウイルスフィルター」、「スパムフィルター」、「カスタムフィルター」の3種類があります。
通常は「スパムフィルター」だけでスパムメール防止ができています。
今回は、「スパムフィルター」だけでは効果がなかったので、強化策として「カスタムフィルター」を追加しました。
「カスタムフィルター」の設定は簡単です。
「XREA」では「設定例A」と「設定例B」の2例が予め用意されています。
ブログの「カスタムフィルター」としては「設定例A」が推奨されていたので「設定例A」を選択。すると、自動的に該当する文字列が該当欄に入力されます。
後は「保存」をクリックするだけで設定が完了です。
「カスタムフィルター」設定してから数日、「カスタムフィルター」適用前後の変化を確認しました。
ここで気付きました。
問い合わせフォームで使ったプラグイン「Contact Form7」は、訪問者がフォームから送信すると管理者に確認メールが届く設定になっています。
「カスタムフィルター」では、スパムメールはブロックします。しかし、管理者への確認メールはスパムメールではないのでブロックせず受信してしまうのでした。
つまり、「カスタムフィルター」だけでは解決にはならないのです。
「コンタクトフォーム」からの「承諾確認」の設定
管理者への確認メールが届かないようにするには、スパムを「送信させない」ことが必要です。
そこで行った対応が「承諾確認」の設置です。
問い合わせフォームに「確認して送信」を追加し、ここにチェックを入れないと送信できないようにします。チェックボタンを必須にすることでスパムブロックの効果アップを狙いました。
手順は、「ダッシュボード」の「お問い合わせ」の「コンタクトフォーム」にある「フォーム」タブ内の「承諾確認」タブを選択。表示されるウインドウの「承認確認チェックボックスフォームタグジェネレーター」から設定します。
変更個所は「このチェックボックスは任意選択です。」のチェックを外し、「同意条件」に希望する文章を記入し、「タグを挿入」をクリックして完了です。
この対応策は、チェックを入れるだけなので正しい問い合わせユーザーに対しても最小限の手間で済ませられます。
「functions.php」に追記
「コンタクトフォーム」での「承諾確認」の設置をして数日様子を見ました。
しかし、期待した効果は得られませんでした。スパムメールの確認メールは相変わらず届きます。
そこで、次の対処方法に着手。
今回は、「functions.php」に追記する方法を試しました。
これは、面倒くさい、というかソースコードを追記するのでHTMLに馴れていない人には敷居が高い方法となります。
追記する内容は、問い合わせフォームの「問い合わせ内容」欄に日本語がなかったら送信しないという設定です。
通常、「functions.php」に追記するにはFTPを開き直接「functions.php」に記述する必要があります。
しかし、「WordPress」は「ダッシュボード」の「外観>テーマファイルエディター」内の「functions.php」に記述することでOKなので楽です。
「functions.php」する追記する内容は検索で参考にしたブログによって多少の違いがありました。
順番に試したが、今回私のブログでは下記の記述が一番効果がありました。
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;
}
add_filter(‘wpcf7_validate_textarea’, ‘wpcf7_validation_textarea_hiragana’, 10, 2);
add_filter(‘wpcf7_validate_textarea*’, ‘wpcf7_validation_textarea_hiragana’, 10, 2);
記述は「ひらがなが含まれなかったら送信しない」という内容です。
他に試した追記は「英語だけだったら送信しない」という記述でした。
このため、英語のスパムはブロックしたのですが、アラビア語やロシア語などがすり抜けてきました。
そこで、採用した記述のようにひらがながあるか否かで判断をしたところ、アラビア語やロシア語など英語以外の言語もブロックできました。
そもそも、どんな短い日本語の文章でもひらがながない文章は考えられないので「ひらがなが含まれなかったら送信しない」は理に適っています。
まとめ
以上を設定の上で、1週間ほど経過したところ、スパムメールがゼロになりました。
今回のスパムブロックの経緯から判断すると「functions.php」の追記だけで十分だと思います。しかし、念のため「コンタクトフォーム」の「承諾確認」設定も残し運用しています。
少々手間取りましたが、スパムメールのブロックという当初の目標を達成することができましたヽ(^O^)ノ
コメント