Topics

GoogleFormカスタマイズでライトなスパム対策

  • column

Webサイトの問い合わせフォームをGoogleFormに乗り換えたいというご要望によって以前実装したGoogleFormカスタマイズ。

コラムにまとめて公開しているのですが、ありがたいことにたくさんの方が参考にしてくださっているようです!ありがとうございます。

GoogleFormでお客様のフォームを作るときの落とし穴
GoogleFormカスタマイズの確認画面を実装

そんな中、迷惑メールが大量に送られてくるので対策はありますか?とのご依頼が。
今回はGoogleFormコラム第三弾としまして、GoogleFormカスタマイズのスパム対策についてまとめました。

まず対策として思い浮かんだ案が、Googleが提供する無料のセキュリティサービスreCAPTCHAの導入はできないか?ということ。

ですが、

Google フォームには「reCAPTCHAを有効にする」というような標準設定・トグルは存在しません。フォームの編集画面にもそうした項目はなく、Googleが公式に用意している機能ではないというのが正しい認識です。

とのこと。さらに調べたところ、GoogleFormのreCAPTCHAはGoogleの判断によって機能するものらしく、reCAPTCHAマークが出現するか否かが分かりません!

そもそも、GoogleFormのカスタマイズはentry.386122698のうようなフィールドIDをHTMLに入力するため全て平文で見えてしまいます。このURLとentry IDさえ分かれば、ブラウザでこのページを開かずともcurlやPythonのrequestsのような単純なスクリプトから直接formResponseへPOSTを送りつけることが技術的に可能です。

実際、Google Formのスパムの多くはこの「ページを経由せず直接エンドポイントを叩く」パターンのようで、これはreCAPTCHAを入れても同様で、トークン検証をGAS側などサーバーサイドで行わない限り直接POSTの経路には効きかず、根本解決にはなりません。

ですが、対策はある!

実際のスパムボットには、汎用的な「お問い合わせフォームを見つけて自動入力して送信する」タイプ(ページを実際にレンダリングしてDOM経由で送信するボット)も多く存在します。

このタイプに対しては、送信ボタンをJSで制御する仕掛けは一定の効果があります。精度を上げるなら、仕掛けをいくつか組み合わせるのがおすすめです。いずれもHTMLファイルの変更だけで完結し、Googleフォーム側・GAS側は一切触りません。

参考:[reddit] How can I prevent bots from spamming my Google Form and flooding my email?

1. JSで毎回ランダムな数字同士の足し算を生成して表示する。

Math.floor(Math.random()*9)+1 同士の足し算をランダム生成した簡単な計算式です。JSでページ読み込みのたびに例えば「3 + 5 = ?」のような数字をランダム生成して画面に表示し、ユーザーが正しい答えを入力するまで送信ボタンをdisabledのままにする、という仕掛けです。

ユーザーには多少の手間になってしまいますが、見た目のUIに反応せず送信ボタンを押しにいく汎用ボットに引っかかる傾向があります。

2. ハニーポット欄(見えない入力欄)による自動判定

CSSで画面外に配置し、人間の目には見えない入力欄を1つ用意する。人間が使う際にはこの欄を触ることはないが、フォームを機械的に全項目埋めてから送信するタイプのボットはここにも値を入れてしまうため、送信時にこの欄に値が入っていた場合は送信をキャンセルする仕掛けです。

効果があるのは「フォーム上の入力欄を(見えるかどうか関係なく)機械的に全部埋めてから送信する」タイプのボットです。この手のボットは非常に多いので対策として期待できそうです。

それぞれ検知できるボットのタイプが異なるため、両方を組み合わせた方が取りこぼしが少ないです。

「ページを経由しない直接POST型のスパム」に対しては引き続き効果が及ばない点は変わりません。

Webサイトのページを経由せずGoogleFormに直接スパム攻撃されると結局GoogleForm自体を再作成しなければなりません。

それを踏まえた「一部の一般的なボットに対する軽減策」として導入する分には、かなり有効ではないでしょうか!

この記事を書いた人

マークアップを中心に、JavaScriptやReact、Next.jsを使ってフロントエンドの開発をやっています。自分が関わったサイトが無事に公開されると嬉しいです!趣味はギターを弾くこと。猫と焼き芋が好き🐱🍠

ひらっち

フロントエンドエンジニア / 2022年入社

このスタッフの記事を見る

安心のチーム体制とスピードのある対応力が自慢

リベロジックでは、ベテランスタッフが積極的にプロジェクトを推進するため、お客様から高く評価されています。
プロジェクトマネージャー、ディレクターをきちんとアサインし、プロジェクト全体をスムーズに進行することを心掛けています。 不必要なフルコミットでのコスト増加を防ぎ、適材適所にリソースを配分するスタイルで、業務内容の把握から見積作成/提出の速さにも定評があります。

※ 当社はSES的な常駐業務等は積極的に行っておりませんので予めご了承ください。

Slack、Teams、Redmine、Backlog、Asana、Jira、Notion、Google Workspace、Zoom、Webexなど、ほぼすべての主要なプロジェクト管理ツールやチャットツールをご利用いただけます。

Webのお悩みご相談ください。

ケーススタディ

AIコンシェルジュ リベロ爺がお答えします。

このサイトに掲載されている内容をもとにAIが回答します。チャットには個人情報を入力しないでください。内容に誤りが含まれる場合があるため、重要な事項はお問い合わせからご確認ください。