SQLインジェクションとは(全体像)
SQLインジェクションとは、Webサイトなどの入力欄に、悪意のあるSQLの文を入れて、データベースを不正に操作する攻撃のことだ。「インジェクション」は「注入」という意味。
たとえば、ログイン画面のユーザー名の欄に、ふつうの名前ではなく、データベースをだますための特別な文字列を入れる。すると、本来なら通らないログインが、すり抜けてしまうことがある。
ここで一番のポイント。SQLインジェクションは、入力された文字列が、そのままSQLの一部として実行されてしまうことで起きる。「入力欄は、ただ文字を受け取るだけで危険はない」と思い込むと誤りで、入力の扱いを間違えると、攻撃の入り口になる。
詳しく:対策はプレースホルダが最重要
ここが心臓部。ポイントを表で押さえよう。
SQLインジェクションのポイント
| 項目 | やさしい意味 |
|---|---|
| しくみ | 入力欄から悪意のSQLを注入して不正操作 |
| 影響 | 認証回避・情報漏えい・データの破壊 |
| 最重要の対策 | プレースホルダ(パラメータ化クエリ) |
| 重ねる対策 | 入力検証・エスケープ・最小権限・WAF |
対策で最も重要なのが、プレースホルダ(パラメータ化クエリ)だ。これは、入力された値を「ただのデータ」として扱い、SQLの命令としては実行させないしくみ。これで、悪意のSQLが注入されても、命令として動かなくなる。
ここで一番のポイント。対策はプレースホルダが最重要だ。「入力のチェックさえすれば、それだけで安全」と思い込むと誤りで、入力検証・エスケープ・最小権限・WAF(防御の壁)などを重ねて守るのが基本だ。
わかりやすく言い換えると
身近なたとえで整理しよう。
SQLインジェクションは、「注文用紙の名前欄に、店の指示書をこっそり書き込んで、店をあやつろうとする攻撃」のイメージ。要するに、入力にまぎれこませた命令で、システムをだます。
プレースホルダは、「入力された内容は、あくまで『データ』としてしか扱わない、と決めておくしくみ」こと。つまり、入力を命令として実行させない。
複数の対策を重ねるというのは、「鍵を一つではなく、いくつもかけて守る」こと。
試験のツボ
🔴 一番出る:攻撃のしくみ
①入力欄から、悪意のあるSQLを注入する攻撃
②入力が、そのままSQLとして実行されてしまうのが原因
🔴 次に出る:対策(最重要)
①プレースホルダ(パラメータ化クエリ)が最重要
②入力検証・エスケープ・最小権限・WAFを重ねる
🟡 押さえると安定:影響
①認証回避(ログインのすり抜け)・情報漏えい
②データの破壊など、被害が大きい
よくある間違い
①「入力欄は、ただ文字を受け取るだけで危険はない」→ ✗ 入力がそのままSQLとして実行されると、攻撃の入り口になる。
②「入力のチェックさえすれば、それだけで安全だ」→ ✗ 最重要はプレースホルダ。複数の対策を重ねて守る。
③「SQLインジェクションは、データベースとは関係ない攻撃だ」→ ✗ 入力からSQLを注入し、データベースを不正に操作する攻撃。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(攻撃のしくみ)
SQLインジェクションに関する次の記述のうち、最も適切なものはどれか。
- 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
- 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
- 入力欄から悪意のSQLを注入し、DBを不正に操作する攻撃だ
- 完成したシステムを宣伝して、より多く売るための広告活動である
解答は 3 です。
SQLインジェクションは、入力欄から悪意のあるSQLを注入し、データベースを不正に操作する攻撃なのです。入力がそのままSQLとして実行されるのが原因なります。
選択肢1は給与計算、選択肢2は請求書の事務、選択肢4は広告で、どれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のしくみではない |
| 2 | ✗ | 請求書の事務の話 |
| 3 | ✓ | 悪意のSQLを注入する攻撃で正しい |
| 4 | ✗ | 広告活動ではない |
オリジナル問題2(影響)
SQLインジェクションの影響に関する次の記述のうち、最も適切なものはどれか。
- 認証回避や情報漏えい、データの破壊などを招くものである
- 社員の給与を計算するときだけ、起きるとされているものだ
- 取引先への請求書の枚数しだいで、決まるとされているのだ
- システムの動きが、少しだけ速くなるとされているのである
解答は 1 です。
SQLインジェクションは、認証回避(ログインのすり抜け)や情報漏えい、データの破壊などを招くのです。被害が大きいなります。
選択肢2の給与、選択肢3の請求書、選択肢4の「速くなる」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 認証回避・情報漏えい等で正しい |
| 2 | ✗ | 給与計算のときだけではない |
| 3 | ✗ | 請求書の枚数で決まるのではない |
| 4 | ✗ | 速くなるものではない |
オリジナル問題3(対策)
SQLインジェクションの対策に関する次の記述のうち、最も適切なものはどれか。
- 社員の給与を計算するときだけ、必要だとされているものである
- プレースホルダ(パラメータ化クエリ)が、最重要の対策である
- 取引先への請求書を郵送するときだけ、必要だとされているのだ
- 対策は、いっさい必要ないものだとされているものなのである
解答は 2 です。
対策は、プレースホルダ(パラメータ化クエリ)が最重要なのです。入力検証やエスケープなどを重ねて守るなります。
選択肢1の給与、選択肢3の請求書、選択肢4の「必要ない」は、いずれも違うのです。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 給与計算のときだけではない |
| 2 | ✓ | プレースホルダが最重要で正しい |
| 3 | ✗ | 請求書のときだけではない |
| 4 | ✗ | 対策は重ねて行う |
まとめ
押さえどころ
- 🔴 しくみ = 入力欄から悪意のあるSQLを注入し、データベースを不正に操作する攻撃。入力がそのままSQLとして実行されるのが原因。
- 🔴 対策(最重要) = プレースホルダ(パラメータ化クエリ)が最重要。入力検証・エスケープ・最小権限・WAFを重ねる。
- 🟡 影響 = 認証回避(ログインのすり抜け)・情報漏えい・データの破壊など、被害が大きい。
次に学ぶ
- SQL基本(DDL/DML/DCL/TCL) ── SQLの基本。攻撃も対策も、SQLのしくみを知ると理解しやすい。
- DCL(GRANT/REVOKE) ── 権限を制御するSQL。最小権限は、被害を小さくする対策の一つ。
執筆: SikakuQuest編集部