AdvancedGFormsのセキュリティ対策
AdvancedGFormsで行っているセキュリティ対策について解説します。
コンタクトフォームに必ず付きまとうセキュリティですが、フォームを利用した悪意のある攻撃は大きく分けると以下のつにわけられるかと思います。
- SQLインジェクションやコマンドインジェクションのような別のプログラムを混入させ、実行させるもの
- DoS/DDoSやスパム送信などの大量の処理を実行するもの
AdvancedGFormsではこのような悪意のある攻撃からフォームを守るための対策を十分に行っております。
index
SQLインジェクションやコマンドインジェクションの対策
SQLインジェクションやコマンドインジェクションはデータベースを使用していたり、PHPなどのサーバーサイドで動くプログラムを使用している際に発生するリスクがあります。
多くのフォームはこちらの図のよう仕組みで動作します。
webサイトからユーザーがお問い合わせ内容を送信すると、一度サーバーを介し、送信内容のデータをチェックしたり、データベースへ保存したり、返信メールを送信したりと様々な処理を行います。
このサーバー側での様々な処理を行う際に悪意のあるプログラムを混入させてしまうリスクがあるわけです。
そのリスクを完璧に排除する事はなかなか難しいでしょう。
これだけIT技術が発展しても不正アクセスや情報漏洩などのインシデントはなくなっておりません。
それは、多くの場合がセキュリティに関するエンジニアの知識不足によるもので、世界的に周知な攻撃手法に対する対策が十分に施されないままサイトを公開してしまっているからなのです。
大手企業ならば大量にお金をかけて高度なセキュリティ対策を行う事が可能ですが、中小企業や小さなweb制作会社などでは十分なセキュリティ対策が難しいというのが現状です。
AdvancedGFormsはGoolgeフォームを使用するので安心
セキュリティに対しての知見を持ったエンジニアを中小企業や小さなweb制作会社などが確保するのは難しいのでなかなか十分なセキュリティ対策を行うのが難しいのが問題でしたが、この問題を根本から解決するにはサーバーサイド部分のセキュリティは大手にお任せすることです。
AdvancedGFormsではそもそもサーバーサイドのプログラムを使用しておりません。
AdvancedGFormsはGoogleフォームを使用しますので、サーバー部分のセキュリティは全てGoogleが保証してくれます。
世界中のスーパーエンジニアが在籍するスパー大企業が提供するフォームですのでセキュリティは完璧です。
DoS/DDoSやスパム送信
サーバー側のセキュリティは安心とはいえ、大量送信を行うDoS/DDoSやスパムの問題は残ります。
ボットを利用して単純に大量のフォームを送信を行いサーバー側の処理を圧迫させるという嫌がらせのような行為や、広告文やURLをお問い合わせ内容に記載し、お礼メールを利用して悪さをする事もあります。
ここでは大半を占める手法として、サンクスメールの送信機能を悪用した攻撃の例を紹介します。
サンクスメールを利用した攻撃
多くのフォームには、お問い合わせがきた際に「お問い合わせありがとうございました」という趣旨のメールを自動で送信する機能が搭載されていますが、この仕組みを悪用したものになります。
例えば、以下のようにする事で攻撃ができてしまいます。
- フォームのメールアドレス欄に攻撃したい相手のメールアドレスを入力する
- お問い合わせ内容を記載するテキストエリアに広告のリンクやフィッシングサイトのURLを入力する
- 送信
- サンクスメールが1で入力したアドレスに送信される
そして、その後、サンクスメールを送信された相手がそのサンクスメールに記載されている広告やフィッシングサイトのURLをクリックし、何かの損害を被ってしまう。
このような流れで誰かを攻撃するという手法がありますが、その攻撃に加担してしまう点が恐ろしいところです。
このような攻撃はプログラムを使用して機械的に大量に送ります。
ですので、ボットかどうかを判断するためにリキャプチャ対策を行う事が一般的となっております。
AdvancedGFormsのスパム対策
スパム対策として一般的なものはリキャプチャですが、リキャプチャを利用するためにはサーバー側プログラムを使用した認証を行う必要があります。
AdvancedGFormsはサーバー側のプログラムを使用していないので、リキャプチャを使用する事が難しいです。
ですのでAdvancedGFormsではリキャプチャを使用しない別の対策を行っており、以下の2点になります。
- ハニースポットを用意する
- 送信先を隠す
ハニースポットの利用
ハニースポットの利用について理解するためにはそもそも、ボットがどのようにして大量にフォームを送信するのかという事を知る必要がります。
ボットから大量にフォーム送信を行う方法として多く採用されているのは存在する入力フィールドを機械的に適当な値で埋める事で送信可能にする方法です。
その方法の手順は以下のような形になります。
- フォームへアクセスします
- HTMLを解析し、inputもしくはtextareaタグなど入力を受け付けるHTMLタグを見つけます
- 2で発見した入力フィールドすべてを適当な値で埋めます
- submitと記載のあるinputもしくはbuttonタグを見つけます
- 4で見つけたボタンをクリックします
このような作業をプログラムを使って自動で行います。
ここでの対策のポイントは、ボットが入力フィールドをすべて適当な値で埋める点を逆手に取ることです。
ダミーのinputを用意し、そこに値が存在すれば送信できないような仕組みにする事でボット対策が可能となります。
そのダミーのinputはユーザーからは見えないように透明にしておく。
もしくは、「あなたが人間の場合、こちらにチェックを入れないでください。」というような文言と一緒にチェックボックスを用意します。
もしもフォームを操作しているのが人間ならこの文章を読み、チェックを入れる事はないでしょう。
ですが、ボットの場合、書かれている文字を読み取ってその意図を認識し、チェックするかしないかを判断するような高度な事はなかなか難しいです。
ですので、これに引っ掛かり、スパム送信を防げるという仕組みです。
AdvancedGFormsではこのハニースポットを利用してスパム攻撃対策を行っております。
送信先を隠す
ハニースポットを利用してスパム対策を行っておりますが、ハニースポットを利用する対策は一般的ですので攻撃側も重々承知です。
ですので攻撃手法を工夫し、別の方法を利用する事があります。
別の方法とは、送信先URLを抜き出し、フォームから送信ボタンを押さず、直接送信してしまう方法です。
一般的にフォーム構築する場合はフォーム自体を表示いているサイトと、送信後の処理を行う場所が分かれております。
処理を行う場所のアドレスはHTMLコードに記載しており、HTMLコードを見ると簡単にわかってしまいます。
HTMLコードは誰でも簡単にブラウザから確認する事が可能です。
実際にフォームを構成するHTMLコードを見てみると以下のようにformタグのactionに送信先のURLが記載されている事がわかるかと思います。
<form ... action="https://送信先のURL" ... >
このactionに記載されているURLへ直接データを送信する事でフォームの送信が可能なのです。
ですので、多くの場合は直接送信された場合には処理を行わないというようなセキュリティ対策を行いますが、AdvancedGFormsでは、そもそもactionに送信先のURLを記載しないという形で対策を行っております。
URLを知らなければ送信のしようがありませんので、これはかなり強力な対策と言えます。