@WORDデザインサンプル

SQLインジェクションとは、アプリケーションのセキュリティ上の不備を意図的に利用し、アプリケーションが想定しないSQL文を実行させることにより、データベースシステムを不正に操作する攻撃方法のこと。また、その攻撃を可能とする脆弱性のこと。


SQLに別のSQL文を「注入 (inject)」されることから、「ダイレクトSQLコマンドインジェクション」とも呼ばれる。



原理

アプリケーションが入力値を適切にエスケープしないままSQL中に展開することで発生する。

次のようなSQLを発行することを考える。

SELECT * FROM users WHERE name = '(入力値)';


ここで入力値に "' OR 't' = 't" という文字列を与えた場合を考えると、SQL文は次のように展開される。

SELECT * FROM users WHERE name = '' OR 't' = 't';


このSQL文では条件が常に真となるため、nameカラムの値にかかわらず、全レコードが選択される。


また、複数のSQL文を注入することによるデータの破壊や改竄、ストアードプロシージャを実行されることによる情報の漏洩や改竄、OSコマンドの実行などを引き起こすこともできる場合がある。



対策

入力値を適切にエスケープすることで防ぐことができる。上述の文字列中への展開では、メタ文字 ' OR 't' = 't" という値を持つレコードが選択される。

SELECT * FROM users WHERE name = ''' OR ''t'' = ''t';

文字列リテラル以外では適切なエスケープ法がSQL標準に定義されていないので、ホワイトリスト(許可リスト)方式による入力値の検証を行うことで代用とする。


データベースシステムやライブラリによっては、準備された文 (prepared statement) を用いてエスケープ処理が自動化されており、対策もれを防ぐ上で有益である。



実例

  • 2005年5月に発生した、価格.comのWebサイトへの改竄攻撃事件でのシステム侵入者の攻撃方法は、このSQLインジェクションによるものであると言われている。
  • 2005年11月に発生した、「ワコールオンラインショップ」個人情報漏洩の手口はSQLインジェクションである。
  • 2008年3月に発生した、トレンドマイクロのWebサイトの改竄はSQLインジェクションによるものである。



関連項目



外部リンク


出典: フリー百科事典『ウィキペディア(Wikipedia)』

Comments are closed.

ホットワード @WORD サンプル SQLインジェクション 紹介
割引クーポンまとめ情報 - クー割