お問い合わせフォームの自動返信機能を悪用した攻撃があると、さくらインターネットより注意喚起がありました。
https://www.sakura.ad.jp/information/announcements/2020/12/08/1968205707/
おそらく15年以上前のことですが、自作のPHPの問い合わせフォームをネットにあるソースをもとにして、見よう見まねで作成したことがあります。その時はまだエンジニアとして仕事をしていたわけではなく、趣味のホームページ(当時はまだウェブサイトとは言わなかった)をniftyのレンタルスペースを使って運用しているという程度のものでした。
自作の問い合わせフォームが動いて気をよくしていたある日、突然自分のホームページがまったく動かなくなりました。調べると1Gほどもあるとんでもない容量の問い合わせメールを受信が記録されていました。
「なんだこれは」と最初は意味が分からなかったのですが、サーバーを調べるとそれが嫌がらせだったと分かりました。ネット回線が速くなった今でも1Gのファイルはけっこう重いほうだと思いますが、15年も前に当時の回線品質やPCのスペックで1G超えのファイルを扱うとはその嫌がらせをした人もよほど暇だったのでしょう。
それ以来ネットは悪意の塊なのだと肝に銘じ、そういう前提でネット世界と付き合うようになりました。
そしてその時、問い合わせフォームに関しては即座に入力サイズの上限をもうけました。このように、問い合わせフォームに関しては素人が自分でなんとかしようとするのはあまりに危険です。上で紹介したさくらインターネットの記事にある通り、プラグインを使うとかプロに任せるほうが安全です。(ちなみにプロに任せても確実にトラブルが起きないわけではありません、とエンジニアとして付け加えておきます)。
さて、それでも自分で問い合わせフォームを自作したいという場合は以下のようなことに留意するべきでしょう。あるいは、外部にウェブシステムを任せている会社のウェブ担当者などがセキュリティチェックする際は、こういったことに注意するといいでしょう。
問い合わせフォームのセキュリティチェック事項
- 問い合わせフォームの入力サイズの上限があるか
- インジェクション回避、つまりタグ(HTML、SQL、その他プログラム)の無効化を考慮しているか
- サーバーサイドのプログラムでセキュリティチェックする
- メール送信の実行ファイルに外部から直接アクセスできないようにすること
- メールサーバーを利用する場合は、設定値に関しては環境変数を利用すること
- そもそも、自動返信機能って本当に必要ですか?
安全と利便性が相反するものである以上、どこまでセキュリティ対策をするかの判断は実はけっこう難しいもので、あまりセキュリティがちがちにすると問い合わせが減ってしまうとか、運用コストがかさんだりします。だからといってざるにするわけにもいきません。ウェブシステムというのは、問い合わせフォーム一つをとっても実は考えることがいっぱいあります。
どんな攻撃をうけるか
問い合わせフォームに入力上限をつけずに嫌がらせをうけた経験を上に書きましたが、他にもいろいろな事例があります。そんな事例をいくつか紹介しましょう。
メール送信の実行ファイルに外部から直接アクセスできないようにすること
この項目を守らないと、嫌がらせbotがサーバー上のメール送信プログラムに直接アクセスし、1秒ごとに問い合わせメールを受信する攻撃をうけます。1秒ごとですよ、1秒ごと!問い合わせフォームからのメールを受信する担当者がどれだけストレスを受けることやら。というわけで実行ファイルの呼び出しは環境変数を使いましょう。
サーバーサイドのプログラムでセキュリティチェックする
世の中にはサーバーサイドのプログラムは書けないけど、クライアント側で実行するJavaScriptだけは少し書ける、というウェブ系の人がたくさんいます。JavaScriptはHTMLを学んで、HTMLだけでは物足りない人が次に学ぶ事が多く、優れたプログラム言語です。
しかし、JavaScriptはブラウザ側でオフにすることができます。問い合わせフォームのセキュリティチェックをJavaScriptだけに任すのは危険です。問い合わせフォームの設置はサーバーサイドのプログラムを扱える人に依頼しましょう。
よくあるパターンは、ウェブに予算をかけない会社が、社内で一番パソコンに詳しい人にウェブ業務を丸投げし、その人が頑張っても所詮素人仕事しかできていない場合。
そしてその人が退職し、誰も会社のウェブサイトの仕様が分からないまま放置され、時間が経過したある日、突然攻撃を受けてなすすべがない。あるあるですね。ウェブシステムは普段からコストをかけてメンテナンスをしないといけません。突然困ってプロに依頼しても、依頼されたプロでもどうにもできなかったり、解決までにすごく時間がかかったりします。
メールサーバーを利用する場合は、設定値に関しては環境変数を利用すること
スクリプトファイルにメールサーバーの接続情報を直接書くなんてもってのほかです。スクリプトファイルが外部から直接閲覧されることは基本的にないでしょうが、それでも万一に備えて一手間かけて環境変数にするのが基本です。情報流出などの多くの事例は面倒な作業を放置した結果起きるのが世の常です。
まとめ
問い合わせフォームの設置は基本的にプロに任せるべき。今動いている問い合わせフォームの仕様が分からない場合は、社内でも外部でもいいので一度セキュリティチェックをしましょう。日頃のメンテナンスを放棄するなら、いざという時に困るのは仕方ないと諦めましょう。