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インジェクション攻撃が絡んでいる。
再検索