1.1 SQLインジェクション
データベースと連携したwebアプリケーションは、利用者が入力した情報をもとにSQL文を組み立ててデータベースを利用する。このとき入力フォームなどに不正なクエリを埋め込むことによってデータベースを不正利用することを、SQLインジェクション攻撃と呼ぶ。
発生しうる脅威
-
データベースに蓄積された情報の漏えい
個人情報等が漏洩する。
-
データベースに蓄積された情報の改ざん
webページの内容が改ざんされたり、管理者以外の手によってパスワードが変更されてしまうことがある。
-
認証回避によるログイン
ログインした利用者に許可されている全ての操作を不正に行われる。
-
ストアドプロシージャを利用したOSコマンドの実行
システムの乗っ取り、他への攻撃の踏み台としての悪用。ストアドプロシージャとはデータベースに対する一連の処理手順を一つのプログラムにまとめ、データベース管理システムに保存したもの。戻り値付きのものはストアドファンクションと呼ぶ。
根本的解決方法
-
SQL文の組立ては全てプレースホルダで実装する。
SQL文のひな形の中に変数(プレースホルダ)において、後に変数の中に値を割り当てる。
-
SQL文の組立てを文字列連結により行う場合は、エスケープ処理等を行うデータベースエンジンのAPIを用いて、SQL文のリテラルを正しく構成する。
SQL文において特別な意味を持つ記号が入力されたときに、別の文字に変換するようエスケープ処理を行う。
保険的対策
-
データベースに関するエラーをブラウザに表示しない
エラーメッセージの内容に、データベースの種類やエラーの原因などはSQLインジェクション攻撃を行う上で有用な情報となるので、利用者のブラウザ上に表示させないように実装する。
-
データベースに接続するアカウントに適切な権限。
データベースに接続する際に使用するアカウントの権限を必要最低限に設定する。
1.2 OSコマンドイジェクション
最終更新:2011年04月28日 15:08