💻 ITパスポート | テクノロジ系・セキュリティ

SQLインジェクションとは?

入力欄に悪意あるSQL命令を"注入"して、データベースを不正操作する攻撃。個人情報漏洩・データ改ざんの定番手口。

🎬 こんなシーンを想像
ネットショップのログイン画面。攻撃者がパスワード欄に' OR '1'='1と入力した。するとSQLが「常に真」の条件になり、パスワードなしでログイン成功してしまった。
…この入力欄へのSQL命令混入攻撃、何と呼ぶ?
🔓 攻撃の仕組み 【正常な入力の場合】 入力: yamada SELECT * FROM users WHERE id='yamada' 正常に
検索 【SQLインジェクション攻撃の場合】 ' OR '1'='1 悪意ある入力 SELECT * FROM users WHERE id='' OR '1'='1' ↑ 常に真!全データが返る 全ユーザー 情報漏洩! 対策:プレースホルダ(バインド変数)を使う WHERE id = ? ← 入力を文字列として扱い命令と分離
🛡️ 主な対策
① プレースホルダ(最重要)
SQL文の中に入力値を直接埋め込まず、「?」などの仮置きを使って後から値を渡す。SQL命令と入力値が分離されるため、SQL命令として解釈されない。
WHERE id = ? → 入力値 'OR '1'='1 は「文字列」としか扱われない
② 入力値のエスケープ処理
シングルクォートなどSQLの特殊文字を無害化する。プレースホルダの補助として使う。
③ WAF(Webアプリケーションファイアウォール)
不正なパターンの通信を検知・遮断。プレースホルダと組み合わせて多層防御。
⚠️ ひっかけ注意ポイント
XSSと混同しやすい
XSS(クロスサイトスクリプティング)は入力欄にHTMLやJavaScriptを注入して他ユーザーを攻撃する。SQLインジェクションはSQLを注入してDBを攻撃。注入するものが違う。
OSコマンドインジェクションと混同しやすい
OSコマンドインジェクションはOSの命令を注入してサーバーを操作する攻撃。対象がDBか OSかの違い。
「対策はサニタイジングだけ」は不正解
ITパスポートではプレースホルダが対策の代表として出題される。エスケープ(サニタイジング)より確実とされる。
🧠 覚え方(無理やりゴロ)
注射器(インジェクション)でSQL菌を注入してDBを乗っ取るイメージ。
inject(注入)=悪意あるSQLを入力欄に注射する

対策はプレースホルダ(「?」で命令と値を分離)
「?で聞かれた値はただの文字、命令にはならない」