かなり噛み砕いて説明してみた。
そもそもwebサイトとはなにかというところからいいますと、サーバーから配信しているプログラムのことです。 サーバーとは、全世界からアクセスできるように公開しているPCのことで、 ネットワーク上に置かれるからサーバーと呼ばれるだけですので、普段使っているPCと全く同じものと考えていただいて差し支えありません。 全世界でアクセスできるように公開しているということは、その分狙われやすいのですが、 サーバーに直接攻撃を仕掛けても、漏洩するのはそのサーバー上にある情報 だけということをまず念頭にいれてもらえればと思います。 その中でお問い合わせフォームを設置することで考えられるリスクというのを考えた場合、 普通のWebページと違ってユーザーがいて、入力フォームがあり、その内容をメールで送信する仕組みがありますので、 その登場人物であるサーバー自体、あるいはメールの受信者、またユーザーに何らかの攻撃を仕掛けるという3つのリスクが考えられます。 まずメールの受信者に対するリスクですが、 その入力フォームからURLやファイルなどを送信することで、 送信メールを読む人、つまり管理者に送られるメールに送りつけ、 メールを読む人がそれを開くことでそのURLやファイルで悪意あるコードを実行するという攻撃があります。 これは一般的にはプログラムで入力フォームの内容やメールフォーム入力者の操作や情報を確認して、 正当な内容じゃない場合やロボットが操作している場合などにエラーを吐き出すといった処理をしたり、 それで処理しきれない場合には怪しいurlや添付ファイルをクリックしないことで対応する場合が多いです。 つぎにユーザーに対するリスクですが、入力フォームから送信した内容を盗み見るという攻撃があります。 この対策は簡単で、送信内容を暗号化すればよくて、 sslと呼ばれるものを導入することで、データ送信が暗号化されるようになります。 sslはwebサイトのurlを見るとhttpsから始まるようになっているもので、 この表記があるとサーバーが暗号化されるようになります。 今はほとんどのサイトがsslになっているので、割と一般的にはクリアされてはいます。 最後にサーバーに対するリスクですが、 入力フォームの内容にサーバーのデータ、具体的にはデータベースの中身を表示するプログラムを書くことで、 データベースの内容を知るという攻撃があります。 この場合、先ほど言ったようにアクセスできるのはサーバー内のデータだけで、 今日のWebサイトの場合はCMSを使うことが多いですので、 具体的にはCMSのユーザー情報やECサイトの場合にはお客様の情報といったものになります。 どちらにしてもサイトを運営する上で致命的ですので、 エンジニアとしては一番気を使わなくてはいけない実装箇所になるのですが、 具体的な対策としては、入力フォームにプログラムを書いた場合エラーを出力するという方法です。 案外実装レベルとしては簡単なのですが、複雑なフォームになった場合には忘れがちになるので、 色々と流出事故が起こったりするわけです。 他にも万が一流出してしまった場合についても、 パスワードなどの情報を、読み取れないようにハッシュ化することで、 読み取ったデータが実質的に利用できないようにすることができます。 弊社がメインで使っているCMSのWordPressでは標準でパスワードがハッシュ化されていますので、 万が一のときもデータが読み取れないようになっています。
■ 用語のご説明 ・Webサイト:サーバーから配信しているプログラム ・サーバー:全世界からアクセスできるように公開しているPCのこと (ネットワーク上に置かれるからサーバーと呼ばれるだけですので、普段使っているPCと全く同じものと考えていただいて差し支えありません) ※ サーバーが全世界でアクセスできるように公開しているということは、その分狙われやすいのですが、 サーバーに直接攻撃を仕掛けても、漏洩するのはそのサーバー上にある情報だけということを念頭にいれてもらえればと思います ■ お問い合わせフォームを設置することで考えられるリスクの種類 入力フォームがあり、その内容をメールで送信する仕組みと送信されたメールを受信者の3つの登場人物から生じるリスクがあります。 (1)管理者:お問い合わせフォームの送信先(メールの受信者) (2)ユーザー:お問い合わせフォームの操作者 (3)サーバー (1)管理者のリスク ユーザーがお問い合わせフォームの入力フォームからウイルスを埋め込んだページのURLや悪意あるファイルなどを送信し、 管理者がそれらを開くことで感染させるといった攻撃が考えられます。 一般的にはプログラム側で入力された内容をチェックしたり、ユーザーがロボットかどうかを判断するなどして対策します。 プログラムで判断できない場合もございますので、企業様で怪しいURLや添付ファイルをクリックしないなど社内啓発を行っていただく必要があります。 (2)ユーザーのリスク ユーザーが入力フォームから送信した内容を第三者が盗み見るという攻撃が考えられます。 対策としてはフォームの送信内容を暗号化する技術(SSL:WebサイトのURLを見るとhttps://から始まるもの) を導入することになります。 今日ではほとんどのサイトがSSLになっているので、一般的にはクリアされている問題です。 (3)サーバーに対するリスク ユーザーが入力フォームの内容にサーバーのデータ、 具体的にはデータベースの中身を表示するプログラムを書くことで、データベースの情報を読み取るという攻撃が考えられます。 この場合、前述の通りアクセスできるのはサーバー内のデータのみで、 具体的にはCMSのユーザー情報、ECサイトの場合にはお客様の情報といったものが攻撃対象となります。 対策としては、入力フォームにプログラムを書いた場合にエラーにするといった処理を加えるのみになります。 実装のレベルとしては非常に簡単なのですが、 作業者のレベルやチェック手順などに不備が重なり、流出事故が起こってしまうという現状があります。 ※ 万が一流出してしまった場合についても、 データベースのパスワード情報を、読み取れないようハッシュ化(パスワードの不可逆変換)することで、 読み取ったデータを実質的に利用できないようにすることができます。 代表的なCMSのWordPressでは標準でパスワードがハッシュ化されています。