Top > SQL Injection

Web Application

※今後はSQLインジェクション | セキュリティゆいがどくそんにて記事を更新します…

SQLインジェクション

不正なSQL文を注入して重要情報の取得や改竄(かいざん)を行うことが可能となる脆弱性、または攻撃のことです。

検証

ウェブアプリケーションのログイン画面において、以下のような実装(Java)がされているとします。

String userId="admin"; //フォーム[user_id]で入力したと想定
String passwd="hoge";  //フォーム[passwd]で入力したと想定

String sql = "";
sql += "SELECT * FROM m_user";
sql += " WHERE user='" + userId + "'";
sql += " and   pswd='" + passwd + "'";

そして、このSQLの結果が1件でもデータベースから返ってきたらユーザ認証OK、という仕様だとします。
ここで、次のような文字列を[user_id]に設定します。[passwd]には何も入力する必要がありません。

[' or 1=1--]

すると、生成されるSQLは以下のようになります。

SELECT * FROM m_user WHERE user='' or 1=1--' and pswd=''

RDBMS*1によりSQL文法に違いはありますが、[' or 1=1;--]といった文字列を埋め込むことで条件句を必ず真にすることが出来た場合、ユーザIDやパスワードを知らなくてもログイン後の画面に遷移することが可能となってしまいます。

 

対策

IPA 独立行政法人 情報処理推進機構:安全なウェブサイトの作り方にて公開されている安全なSQLの呼び出し方(全40ページ、714KB)を参照してください。

もしくは、いわゆる「徳丸本」の”SQL呼び出しに伴う脆弱性”の項を参照することをお勧めします。

ブラインドSQLインジェクション

 

 

リテラル表現形式

文字列(テキスト・リテラル、文字リテラルなど)

データベースシステム括り文字
Oracle 10g リリース2(10.2)' (シングルクォーテーション)
MySQL 4.1' または " (ダブルクォーテーション)
PostgreSQL 8.3.0' (シングルクォーテーション)
DB2 Version 9' (シングルクォーテーション)
 

 

参考サイト

関連書籍


*1 リレーショナルデータベースマネジメントシステム(Relational Database Management System)

リロード   凍結解除 差分 コピー 名前変更   ホーム 一覧 検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: Mon, 05 Aug 2013 18:37:34 JST (1782d)