kubolog : クボログ

久保のブログ

Contact Form 7の日本語(ふりがな)を入力判定してロシアや海外からのスパムメールを防ぐ方法

WordPressで作ったこのサイトの問い合わせには、
Contact Form 7(コンタクトフォームセブン)を使っています。

ここ最近このフォームを通じて、
ロシア語のスパムメールがよく届くようになってきました。

reCAPTCHAによるスパム対策は実施しているのですが、
これも突破して届いているようです。

そこで、Contact Form 7の問い合わせに
日本語の判定(フリガナ)を追加してスパムを
防ぐ方法
を試してみました。

 

スパム対策のやり方について

スパム対策のやり方は簡単です。

(1) テーマフォルダーの中にある functions.php を編集する。
(2) Contact Form 7で作ったフォーム内にフリガナの項目を追加する。

 

(1) テーマフォルダーの中にある functions.php を編集する。

テーマの中の自分の設定したテーマのフォルダ内に
ある、 functions.php の一番最後の部分に以下のコードを追加します。

// Contact Form 7 スパム対策ここから
add_filter('wpcf7_validate_text',  'wpcf7_validate_hurigana', 11, 2); 
add_filter('wpcf7_validate_text*', 'wpcf7_validate_hurigana', 11, 2);   
function wpcf7_validate_hurigana($result,$tag){    
	$tag = new WPCF7_Shortcode($tag);    
	$name = $tag->name;
	$value = isset($_POST[$name]) ? trim(wp_unslash(strtr((string) $_POST[$name], "\n", " "))) : "";
	// 入力項目名が、'hurigana'の場合に実行
	if ( $name === "hurigana") {
        // ひらがな・カタカナ以外だった場合
        if(!preg_match("/[ぁ-んァ-ヶ]/u", $value)) {
            $result->invalidate($tag, "フリガナを入力してください。");
        }
    }
   return $result;

 }
// Contact Form 7 スパム対策ここまで

(2) Contact Form 7で作ったフォーム内にフリガナの項目を追加する。

Contact Form 7で作っているフォームの部分に
フリガナのパートを以下のように追加します。
名前の下とかに入れればいいかと思います。

<p>お名前(フリガナ) *<br />
    [text* hurigana] </p>

これだけです。

これで、日本語でフリガナを入力しないと問い合わせが送れないようになりますので、
ロシア語の謎のスパムメールを防ぐことができるかと思います。

日本語がわかる方しか問い合わせが送れないデメリットはありますが、
日本語でしか書いてないブログに海外からまともな問い合わせがくるとも思えないので
いいかなーと思います。