ここ数日、ポートフォリオのお問い合わせフォームから、地味にスパムが飛んでくるので迷惑していました。
最近、お問い合わせページからspamメールがよく飛んでくるな...対策仕込むか...
— 影織 (Kageori)@10/16-18 幻想圖書館 秋の超現実祭2021 (@kageori_w) October 11, 2021
ということで、reCAPTCHAを入れて対策してみました。
reCAPTCHAとは?
reCAPTCHAとは、コメントやフォームを送信する際に、人間かボットか判定するための仕組みです。
よく見るのは「この中から信号機の画像を選んでください」みたいなやつです(あれ地味に難しいよね)。
reCAPTCHAにはv2とv3という2種があります。
大きな違いは、怪しい人を通すかどうか、という点です。
v2は怪しければ、画像認証クイズを出して、その段階で弾いてしまうのですが、
v3はとりあえず全員通して挙動を見てみて、「こいつ人間っぽいかスコア」を算出して、足切りを行うのです。
v3だと、人間なのにボットと間違われた衆生を救済できるよう、全メッセージを一旦スパムフォルダにためてチェックする、などの手順が必要になり、ちょっと面倒なんですね。
ということで、今回はv2で実装してみることにしました。
実装手順
今回は、django-recaptchaを使ってサクッと実装しました。
1. 登録
Google reCAPTCHAのサイトに必要情報を登録します。
ラベルはわかりやすい名前を好きにつけましょう。
reCAPTCHAタイプは、先述の通りv2します。
ドメインに、reCAPTCHAを導入したいサイトのドメイン名を入れます。
ドメイン名なので、https...などの余計な部分は入れないでください。
例えば、私の場合、ポートフォリオサイトなので、kageori.pythonanywhere.comですね。
テスト環境でやりたい場合、127.0.0.1などと設定しておけばOKです。
すると、秘密鍵と公開鍵が発行されます。
上が公開鍵、下が秘密鍵 |
ちなみに、この画面を一旦閉じた後にもう一回確認したい場合、reCAPTCHAの画面右上の設定をクリックし、reCAPTCHA のキーというタブを開くと見られます。
右上の歯車マークですね |
2. Djangoのsettings.pyに値を追記
INSTALLED_APPSに、'captcha'を追加し、RECAPTCHA_PUBLIC_KEY(上図のサイトキー)とRECAPTCHA_PRIVATE_KEY(上図のシークレットキー)を追加します(この通りの名前で設定しないといけないみたい)。3. forms.pyの修正
1行目のReCaptchaFieldのimportと、最後の行のcaptcha = ReCaptchaField()を追記しました。v3などの他の種類のものを設定したい場合、captcha = ReCaptchaField(widget=ReCaptchaV3) のように書くようです。
0 コメント