こんにちは。以下記事にて、お問合せページにreCaptchaを追加していますが、それでもプロモーションメール来るんですね…
Wagtailのお問合せページにスパム対策用reCaptchaを追加する
さすがにBotではないと思うのですが、英文の怪しいプロモーションメールが来ました。受け取りたくないし、数が増えたら困るので、本Webページのコメントで対策している「日本語含まれないコメントはスパム扱い」というプラグインを真似て、問合せフォームにも同じような対策をしたいと思います。
日本語判定をする
どのように日本語判定をするか迷いましたが、このサイトを参考に以下にしました。ひらがなとカタカナは日本語のみで使われている文字なので、これで十分な気がしますね!
1
2
3
| import re
def is_japanese(str):
return True if re.search(r'[ぁ-んァ-ン]', str) else False
|
問合せページに組み込む
こちらはWagtailのお問合せページ限定の処理になりますが、reCaptchaの処理に加えて、forms.pyに以下を更に追加しました。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
| class RecaptchaForm(AbstractEmailForm):
form_builder = RecaptchaFormBuilder
def process_form_submission(self, form):
remove_captcha_field(form)
return super().process_form_submission(form)
#ここから追加
def send_mail(self, form):
if self.chk_japanese(form):
return super().send_mail(form)
def chk_japanese(self, form):
content = []
cleaned_data = form.cleaned_data
for field in form:
if field.name not in cleaned_data:
continue
if field.label == 'お問合せ内容':
value = cleaned_data.get(field.name)
return self.is_japanese(value)
return True
def is_japanese(self, str):
return True if re.search(r'[ぁ-んァ-ン]', str) else False
#ここまで追加
class Meta:
abstract = True
|
注意点としては、「if field.label == ‘お問合せ内容’:」としているので、ラベルは適切に変更する必要があります。とりあえず急いで対策するには、これで十分です。日本語が含まれないものは、さも送信されたかのように動きますが、メール送信されません。どれくらいスパムがあるか、ログは取った方がいいかもですが、それはまた別の機会に。
こんな感じにコメントを入れてあります。 