⏱ 8分 ★★★★★ 頻出:高

SQLインジェクション

なぜ起きる?何ができる?どう防ぐ?を図で理解

SQLインジェクション=「悪意ある命令をDBに送り込む攻撃」

Webフォームなどの入力欄に特殊なSQL文を混ぜて送り込み、データベースを不正操作する攻撃です。

個人情報の大量流出事件の多くがSQLインジェクションが原因です。

SQLインジェクションが起きる理由

攻撃の仕組み
① 正常なログイン
ID: yamada
PW: password123
→ SELECT * FROM users WHERE id='yamada' AND pw='password123'
② 攻撃者の入力
ID: ' OR '1'='1
PW: 何でもよい
→ SELECT * FROM users WHERE id='' OR '1'='1' AND pw='...'
→ 常に真になるのでログイン成功してしまう!

SQLインジェクションでできること

対策

✅ プレースホルダ(バインド機構)
SQL文の構造とデータを分離して処理。入力値をSQL命令として解釈させない。最も効果的な対策。
✅ エスケープ処理
シングルクォート(')などの特殊文字を無害化する。
✅ 入力値の検証
数値フィールドには数値のみ許可するなど、型・形式を厳密にチェック。
✅ DBアカウントの最小権限
Webアプリ用DBアカウントにDROP・DELETE権限を付与しない。
✅ WAFの導入
既知の攻撃パターンを自動的に遮断する。
試験では「プレースホルダの使用」が最も根本的な対策として正解になりやすい。

よくある勘違い

「WAFを導入すれば完全に防げる」は誤り。WAFは補完的対策。根本対策はセキュアなコーディング(プレースホルダ)。
エラーメッセージにSQL文やDB構造を表示すると攻撃者にヒントを与える。エラーは詳細を出さないこと。
🧠 確認クイズ
Q1. SQLインジェクションの根本的な対策として最も適切なのは?
Q2. SQLインジェクションで起こりうる被害でないものは?
Q3. SQLインジェクション対策としてDBアカウントの権限を最小にする理由は?