Webサイトの脆弱性と対策(セキュアプログラミング)

 Webサイトを安全・確実なものとするためには、Webサイトの脆弱性への対策が必要になります。以下、代表的な3種の脆弱性と対策について簡単に述べます。Webサイトの脆弱性対策は、高度なプログラミングテクニックが求められることから、継続的な研究テーマとなっています。

SQLインジェクション
 多くのWebサイトでは、ユーザから入力されたパラメータに基づいてSQL文(データベース処理のコマンド)を組み立てます。
 SQL文の組み立て方法に脆弱性がある場合、データベースの内容を不正に表示したり、内容を書き換えられるリスクがあります。さらに、個人情報の漏洩、Webページの改ざん、パスワド変更やシテム停止につながることもあります。
 対策としては、入力された文字列に特殊な意味を持つものが含まれている場合、この文字を適切に処理する、データベースの実行エラーメッセージを利用者のブラウザーに表示しない、必要最小限の権限を持つユーザでアプリケーションを実行することなどが考えられます。これらの対策は、データベースエンジンに依存する部分があることから、奥が深いテクニックです。

OSコマンド・インジェクション
 Webサイトへの入力の一部として、OSコマンドを付加すると、そのOSコマンドを実行してしまうリスクがあります。
 意図しないOSコマンドが実行されると、重要情報の漏えい、設定ファイル書き換え、OS のシャットダウン、ユーザアカウントの追加・変更、迷惑メール送信など、業務システムの運用に重大な影響を及ぼします。特に、スクリプト言語を使ったWebサイトでは注意が必要とされています。
 対策としては、OSコマンドを起動できる関数を使わない、OSコマンドを文字列から除去する、などが考えられます。これらの対策は、実装で使う言語に依存する部分があることから、WebとOSの両方に関する高度なテクニックが求められます。

クロスサイト・スクリプティング
 動的Webページの出力処理に問題がある場合、入力の一部としてスクリプトなどを含む文字列を埋め込まれると、予期しないWebページを出力する可能性があります。
クロスサイト・スクリプティングは、特に、ログイン画面や会員情報の入力画面などで攻撃されるリスクがあり、対策が必要です。
 クロスサイト・スクリプティングの概要を、下図に示します。
 対策としては、Webページに出力するすべての文字列に対し、特殊な意味を持つ文字が含まれる場合、この文字を適切に処理すること、また、Java Scriptの「javascript:」で始まるURLを使わないなどが考えられます。これらの対策は、複雑なプログラミングとWebサーバに負荷を与えることから、豊富な経験に基づく高度なテクニックが求められます。