SQLインジェクション攻撃
読み:エスキューエル-インジェクションこうげき
外語:SQL injection attack

 インジェクション攻撃の一つ。
目次

概要
 パラメーターSQLコマンドを挿入し、意図しないSQLコマンドを実行させようとするもの。
 実際にこれが行なわれた場合、その被害は甚大なものとなる。

特徴

実例
 例えば、Webより入力されたユーザー名$uidと、パスワード$passwordを得て、DBを検索することを想定する。この時、次のようなSQLを書いたとする。
 SELECT * FROM users WHERE UID='$uid' AND PASSWORD='$password'
 しかしこれは、非常に悪い例である。
 例えば、この時ユーザー名は適当にaaa、パスワードに次が書かれたとする。
 '; DROP TABLE users;--
 すると、完成したSQLは次のようになる。
 SELECT * FROM users WHERE UID='aaa' AND PASSWORD=''; DROP TABLE users;--'
 こうなると、SELECT文はどうでもよく、その後にDROP文によってデータベースのユーザーマスターが消滅するため、ユーザー管理機構と、そのサイトの機能全てがその時点をもって壊滅する。バックアップから戻すとしても、相当なダメージとなるだろう。
 ちなみに、二つのハイフン(--)は、以降はコメントであり無視するという意味になる。なぜこのようなセキュリティホールをSQLの仕様に導入したのかは定かではない。

被害
 被害としてはデータベースが破壊され、場合によっては情報漏洩が起きうる。これだけでも深刻な被害であるが、拡張ストアドプロシージャが利用可能になっているとOSコマンドインジェクション攻撃も行なわれる可能性があり、極めて危険である。
 近年多発しているWebサイトを通じた大規模情報流出の多くは、SQLインジェクション攻撃が絡んでいる。

再検索