問い合わせフォームのbot対策
問合せフォームを設置すると迷惑メールもやってきます。自動で迷惑メールに振り分けられるけれども、普通の問い合わせも振り分けられて見つからないのはだまらないんで、ドキュメントを参考に対策しました。
ロシア語のメールが届く
メールフォームを設置してからロシア語のメールがくるようになってしまった。英語ならまだしも何を書いてあるかすらわからないのでちょっとうざい。かといってcaptchaをつけると送信する人にひと手間増やしてしまうことになる。というわけで、チュートリアルにあるように対策してみました。
FormLister
コンタクトフォームの設置は下記を参考にします。
[!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対策をします。参考は下記のリンクです。
先述の記述に書き加えをします。
- &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