WordPressのContact Form 7でスパム営業を完全に物理破壊する防衛システム構築

※本記事はアフィリエイト広告を含みます。

WordPressのContact Form 7でスパム営業を完全に物理破壊する防衛システム構築

サイト運営において、プライバシーポリシーを確認しない相互リンク依頼や営業メールは、運営者の時間とリソースを消費するノイズとなります。

この記事では、WordPressプラグインのContact Form 7を対象に、特定キーワードを含む送信をサーバー側で遮断し、入力されたテキストをブラウザ上でリセットする自動防衛システムの構築手順を解説します。

防衛システムの概要と要件

本システムは、サーバー側での送信ブロック処理と、フロントエンド側での入力データ消去処理の二段構えで構成されます。

エラー表示だけでなく、入力内容を強制的にリセットすることで再送信の手間を増やし、スパム行為を物理的に抑制します。

ステップ1:サーバー側での送信ブロック(PHP)

対象のブラックリストキーワードを検知した場合、メールサーバーへ処理を渡す前にプロセスを終了させます。使用しているテーマのfunctions.phpに以下のコードを追記してください。


// Contact Form 7 スパム・営業メールブロック機能
add_filter( 'wpcf7_validate', 'purge_spam_inquiries', 10, 2 );

function purge_spam_inquiries( $result, $tags ) {
    // 監視対象とするフォームのname属性
    $target_fields = array( 'your-subject', 'your-message' );

    // 排除するトリガーキーワード群(部分一致で捕捉)
    $blacklist_keywords = array(
        '相互リンク',
        'backlink',
        'SEO対策',
        '質の高い情報発信', 
        '敬意を抱き', 
        '機材提供の相談'
    );

    $submission = WPCF7_Submission::get_instance();
    if ( ! $submission ) {
        return $result;
    }

    $posted_data = $submission->get_posted_data();

    foreach ( $target_fields as $field ) {
        if ( isset( $posted_data[$field] ) ) {
            $content = $posted_data[$field];

            foreach ( $blacklist_keywords as $keyword ) {
                if ( mb_strpos( $content, $keyword ) !== false ) {
                    // 出力するエラーメッセージ
                    $harsh_message = "【通信遮断・データ破棄】送信プロセスはスパムと判定され強制終了しました。入力されたテキストは消去されています。プライバシーポリシーを確認せずに無差別送信を繰り返す行為はご遠慮ください。当サイトへの営業目的でのアクセスはお断りします。";

                    $result->invalidate( $field, $harsh_message );
                    break 2;
                }
            }
        }
    }
    return $result;
}

ステップ2:フロントエンドでの入力内容クリア(JavaScript)

送信ボタンが押された直後から画面を監視し、エラーメッセージが出現した時点で入力データを消去します。以下のコードをbodyタグの終了直前に追加してください。


<script>
document.addEventListener('DOMContentLoaded', function() {
    var forms = document.querySelectorAll('.wpcf7-form');

    forms.forEach(function(form) {
        // 送信ボタン押下をトリガーとする
        form.addEventListener('submit', function() {

            // 100ミリ秒間隔で画面上のテキストを監視
            var patrol = setInterval(function() {

                // タグを無視して画面に見えている文字だけをスキャン
                if (form.innerText && form.innerText.indexOf('データ破棄') !== -1) {

                    // 標的文字列を確認後、即座に全入力欄をクリア
                    var inputs = form.querySelectorAll('input, textarea');
                    inputs.forEach(function(input) {
                        if (input.type !== 'submit' && input.type !== 'hidden' && input.type !== 'button') {
                            input.value = '';
                        }
                    });

                    clearInterval(patrol);
                }
            }, 100);

            // フェイルセーフ(5秒後に監視プロセスを終了)
            setTimeout(function() {
                clearInterval(patrol);
            }, 5000);

        });
    });
});
</script>

本システムのメリット

■サーバーリソースの保護

スパムメールの通信に対して自サーバーのリソースを消費させず、検知した段階で処理を破棄することでサーバーへの負荷を最小限に抑えます。

■プラグイン仕様への非依存

フロントエンドの処理は画面上の物理的な変化を直接監視するため、プラグインのアップデート等による内部仕様の変更に影響されにくい設計です。

■手動スパムへの対策

入力内容が消失する挙動とリロードの手間により、手作業で定型文を送信している業者の再送信を防ぐ効果が期待できます。