
SQLインジェクションの実例と安全なコーディング方法
1. 初めに
SQLインジェクションに関して調べてみたので、ご紹介させていただきます!
2. SQLインジェクションとは
SQLインジェクションとは、
外部から渡された入力値をそのままSQL文に組み込んでしまった結果、
不正なSQLが実行されてしまう攻撃手法です。
攻撃者はフォーム入力欄やクエリパラメータにSQL文を混ぜ込み、
「本来実行されるはずではない検索・更新・削除処理」を行わせます。
3. 典型例
C#
========================
string userId = Request.QueryString[“user_id”];
string sql = “SELECT * FROM Users WHERE user_id = ‘” + userId + “‘”;
SqlCommand cmd = new SqlCommand(sql, conn);
var reader = cmd.ExecuteReader();
========================
何も対策をしていない場合下記のようなものを入力できます。
' OR '1'='1
これが入力された場合
1=1 は常に真のため、
全ユーザー情報が取得されることになります。
4. 攻撃例
ログイン処理
========================
SELECT * FROM admins
WHERE username = ‘admin’
AND password = ‘入力値’
========================
パスワード欄に下記を入力
‘ OR ”=”
結果、ログインが成功
データ削除
下記を入力
「a’; DROP TABLE Users; –」
ユーザー情報が全消去される危険性もあります。
5. コード上での対策
・パラメータ化クエリを使う
┗データ型が曖昧になるため注意
・文字列連結は行わない
6. Webアプリ側で行うべき対策
・入力値のバリデーション
・DBユーザーへの最低限権限の付与
・例外メッセージの画面露出なし
7. 最後に
開発者がこれらについて十分気を付けていけば、SQLインジェクションは防げるものだと思います!











