TECH MEDIA

テックメディア


データベースプログラミング言語技術開発環境/ツール
すぐ反映できる!

SQLインジェクションの実例と安全なコーディング方法

目次
  1. 01|初めに
  2. 02|SQLインジェクションとは
  3. 03|典型例
  4. 04|攻撃例
  5. 05|コード上での対策
  6. 06|Webアプリ側で行うべき対策
  7. 07|最後に

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インジェクションは防げるものだと思います!

RECRUIT 採用情報

「eビジネスに関わる全ての人を幸せにする」
私達とともに新たな時代をつくりませんか?