[web]reCAPTCHA v3を静的ページで使う

そういえばここ数年はcmsばっかり触ってる。

どういうアレか

5年以上前、ひょっとしたら10年くらい前に作ったWEBサイトがここに来てスパムの被害にあった。

問い合わせフォームからめっちゃ送信されるという、サーバーからも怒られるヤバいやつ。

SSLが一般的になる前からのものを放置してるのが悪いんだけど、今更すぎてドン引きしてる。

基本的にhtmlで組んでて、問い合わせフォームはphpに飛ばしてメール送信するっていう昔ながらの構成。で、諸悪の根源はフォームなので、フォームを消してしまってメールアドレスだけ画像とかで掲載すれば手っ取り早いんだけど、どうにか足掻いてみようという感じで。

今回のはフォームから送ってくるタイプなので、送信するphpに直接のアクセスをしたら弾くってのは意味がない。送信の手順をきちんと踏んでるからだるい。

スパムといえば英数字の羅列なんで、「フリガナ」的なものを作ってバリデーションを噛ませたらいいというのもあるんだけど、どうせならreCAPTCHAを使ってみようという取り組み。

やっていく

reCAPTCHAのアカウントを作る

reCAPTCHA website security and fraud protection
reCAPTCHA is bot protection for your website that prevents online fraudulent activity like scraping, credential stuffing...

v3 Admin Console」からドメインを登録して「サイトキー」「シークレットキー」を取得する。

ドメイン単位の登録になるけど、サブドメインも含まれるので楽ですね。

組み込む

公式がガイドを出してる。

reCAPTCHA v3  |  Google for Developers

2つのキーを送信時、処理時に使って判定をやっていくということ。フォーム側は分かるんだけど受け取ったときの処理がよくわからない感じなので、導入例を見ていく。

サイトの入力フォームにreCAPTCHA v3 を導入する | Points & Lines
スパムメールを防止するためのGoogleのサービス、reCAPTCHA v3の基本的な仕組みと使い方をメモします。reCAPTCHAとは?reCAPTCHAはWebサイトのお申し込みフォームなどでよく見かける「私はロボットではありません」の...
手動でGoogle reCAPTCHAを設定する | 市川ウェブデザイン
市川ウェブデザインは、制作会社・デザイン会社様向けにコーディング業務を請け負っています。WordPressサイト構築を中心に、デザインを忠実に再現した仕上がりを徹底。安心して任せられる実装力で、貴社の制作をサポートいたします。
スパムBOTを排除せよ!reCAPTCHAの実装方法
今回は「Google reCAPTCHA(リキャプチャ)」を自分のWebフォームに導入する方法をご説明していきます。

検索してみるとwpへの導入だったりv2の内容だったりが溢れててアレだけど、まあ、根気強く探せば出てくる。

判定後の処理

普通にやってたら送信できるはずなんで、スパム判定時の処理はdie()とかで強制終了させるだけでいいと思います。万が一、人の手でもそうなったときを考えたら丁寧に組むべきだけど、そういう事例になったことがないので。そもそも負荷をかけられてるのにこっちから更に増やすようなことはしたくないという気持ちもある。

効果測定

メールが送られなくなったら成功。なので、仕込んだら様子を見る。

reCAPTCHAじゃなくてもいいけどさ

スパムメールが来るってだけなら迷惑メールにぶち込めば済むんだけど、昨今のアタックは桁が違ってサーバーから警告や機能制限が飛んでくるレベルになったりする。大手WEBサイトなら分かるけど弱小も被害にあうことがあるので他人事にできない。

無料の範囲でもやれることはあるし、それでちゃんと効果は出るので対策は仕込んだほうがいいです。

楽なのはフォームを設置しないだとか、Googleフォームを使うだとか。

手が込んだことをするなら今回みたいなreCAPTCHAを入れる、似たものを頑張って自作するとか。

外部サービスに頼ると通信とか処理が増えてめんどくさいこともあるので、とりあえずで入れるのもいいけど不具合を感じるなら別の手段を選べる、選択肢が構えられるようにできると良いですね。

追記:使ってみた

馬鹿みたいに来てたスパムメールが無くなった。

とはいえ万全じゃなくて、漏れるやつもあるみたい。

そういうのは、日本向けサイトであれば、最初に書いたように日本語の項目にバリデーションを入れたらいける。

コメント

タイトルとURLをコピーしました