こんにちは。以下記事にて、お問合せページにreCaptchaを追加していますが、
Wagtailのお問合せページにスパム対策用reCaptchaを追加する
こんにちは。 Wagtailでお問合せページを作りましたが、スパム対策用にGoogleが無料(1秒当たり1000件あるいは1カ月当たり100万件以上アクセスがある場合は有料となる)...
それでもプロモーションメール来るんですね…
さすがにBotではないと思うのですが、英文の怪しいプロモーションメールが来ました。受け取りたくないし、数が増えたら困るので、本Webページのコメントで対策している「日本語含まれないコメントはスパム扱い」というプラグインを真似て、問合せフォームにも同じような対策をしたいと思います。
目次
日本語判定をする
どのように日本語判定をするか迷いましたが、このサイトを参考に以下にしました。ひらがなとカタカナは日本語のみで使われている文字なので、これで十分な気がしますね!
import re def is_japanese(str): return True if re.search(r'[ぁ-んァ-ン]', str) else False
問合せページに組み込む
こちらはWagtailのお問合せページ限定の処理になりますが、reCaptchaの処理に加えて、forms.pyに以下を更に追加しました。
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 == ‘お問合せ内容’:」としているので、ラベルは適切に変更する必要があります。とりあえず急いで対策するには、これで十分です。日本語が含まれないものは、さも送信されたかのように動きますが、メール送信されません。どれくらいスパムがあるか、ログは取った方がいいかもですが、それはまた別の機会に。
こんな感じにコメントを入れてあります。
コメント