問い合わせフォームのbot対策 - M-Blog

問い合わせフォームのbot対策

問合せフォームを設置すると迷惑メールもやってきます。自動で迷惑メールに振り分けられるけれども、普通の問い合わせも振り分けられて見つからないのはだまらないんで、ドキュメントを参考に対策しました。

ロシア語のメールが届く

メールフォームを設置してからロシア語のメールがくるようになってしまった。英語ならまだしも何を書いてあるかすらわからないのでちょっとうざい。かといってcaptchaをつけると送信する人にひと手間増やしてしまうことになる。というわけで、チュートリアルにあるように対策してみました。

FormLister

コンタクトフォームの設置は下記を参考にします。

Basic Contact Form - V.2

[!FormLister?
&formid=`ContactForm`
&to=`送信先アドレス`
&from=`送信元アドレス`
&subject=`件名`
&config=`default:core`
&isHtml=`0` //1にすると日本語ではエラーになる
&protectSubmit=`1`
&rules=`{
"name":{
    "required":"お名前を入力してください"
},
"email":{
    "required":"メールアドレスを入力してください",
    "email":"正しいメールアドレスを入力してください"
},
"subject":{
    "required":"件名を入力してください"
},
"message":{
    "required":"メッセージを入力してください"
}
}`
&allowedFields=`name,email,subject,message`
&errorClass=`error`
&requiredClass=`required`
&formTpl=`contactForm` 
&successTpl=`success` 
&reportTpl=`report` !]

後はチャンクにフォームなどのテンプレートを書けばフォームは設置できます。

bot対策

bot対策をします。参考は下記のリンクです。

Anti BOT Field

先述の記述に書き加えをします。

  • &prepare=`antiSpam`・・・FormListerを実行する前に処理するスニペット
  • "antispam":{ "!required":"You must be a BOT" }・・・rulesパラメータに加える
[!FormLister?
&formid=`ContactForm`
&to=`送信先アドレス`
&from=`送信元アドレス`
&subject=`件名`
&config=`default:core`
&isHtml=`0`
&prepare=`antiSpam`
&protectSubmit=`1`
&rules=`{
"name":{
    "required":"お名前を入力してください"
},
"email":{
    "required":"メールアドレスを入力してください",
    "email":"正しいメールアドレスを入力してください"
},
"subject":{
    "required":"件名を入力してください"
},
"message":{
    "required":"メッセージを入力してください"
},
"antispam":{
    "!required":"You must be a BOT"
}
}`
&allowedFields=`name,email,subject,message`
&errorClass=`error`
&requiredClass=`required`
&formTpl=`contactForm` 
&successTpl=`success` 
&reportTpl=`report` !]

formTplのテンプレートに

<input type="text" name="antispam" id="antispam" autocomplete="off" value="[+antispam.value+]" style="display:none;">

を加えます。

次に&prepare パラメータで読み込む antispam スニペットを作成します。

<?php
//スニペット名 antispam
if ($FormLister->getField('antispam')) {
 $FormLister->setValid(false);
}

さて、もしbotならすべての入力欄を関係なく自動で埋めてくるため、[+antispam+]にデータが入力されていればbotとなります。人間であれば見えないので入力をせずに送信することになります。

したがって、上述したスニペットによってbotならば送信が未然に防がれることになります。


2018年08月03日 / CMS

カテゴリー

アーカイブ

最近の投稿

最近の更新

リンク