SQLインジェクションとは?対策はプレースホルダが最重要

公開: 更新: カテゴリ: テクノロジ系

30秒で結論

SQLインジェクションとは(全体像)

SQLインジェクションとは、Webサイトなどの入力欄に、悪意のあるSQLの文を入れて、データベースを不正に操作する攻撃のことだ。「インジェクション」は「注入」という意味。

たとえば、ログイン画面のユーザー名の欄に、ふつうの名前ではなく、データベースをだますための特別な文字列を入れる。すると、本来なら通らないログインが、すり抜けてしまうことがある。

ここで一番のポイント。SQLインジェクションは、入力された文字列が、そのままSQLの一部として実行されてしまうことで起きる。「入力欄は、ただ文字を受け取るだけで危険はない」と思い込むと誤りで、入力の扱いを間違えると、攻撃の入り口になる。


詳しく:対策はプレースホルダが最重要

ここが心臓部。ポイントを表で押さえよう。

SQLインジェクションのポイント

項目やさしい意味
しくみ入力欄から悪意のSQLを注入して不正操作
影響認証回避・情報漏えい・データの破壊
最重要の対策プレースホルダ(パラメータ化クエリ)
重ねる対策入力検証・エスケープ・最小権限・WAF

対策で最も重要なのが、プレースホルダ(パラメータ化クエリ)だ。これは、入力された値を「ただのデータ」として扱い、SQLの命令としては実行させないしくみ。これで、悪意のSQLが注入されても、命令として動かなくなる。

ここで一番のポイント。対策はプレースホルダが最重要だ。「入力のチェックさえすれば、それだけで安全」と思い込むと誤りで、入力検証・エスケープ・最小権限・WAF(防御の壁)などを重ねて守るのが基本だ。

わかりやすく言い換えると

身近なたとえで整理しよう。

SQLインジェクションは、「注文用紙の名前欄に、店の指示書をこっそり書き込んで、店をあやつろうとする攻撃」のイメージ。要するに、入力にまぎれこませた命令で、システムをだます。

プレースホルダは、「入力された内容は、あくまで『データ』としてしか扱わない、と決めておくしくみ」こと。つまり、入力を命令として実行させない。

複数の対策を重ねるというのは、「鍵を一つではなく、いくつもかけて守る」こと。


試験のツボ

🔴 一番出る:攻撃のしくみ

①入力欄から、悪意のあるSQLを注入する攻撃

②入力が、そのままSQLとして実行されてしまうのが原因

🔴 次に出る:対策(最重要)

①プレースホルダ(パラメータ化クエリ)が最重要

②入力検証・エスケープ・最小権限・WAFを重ねる

🟡 押さえると安定:影響

①認証回避(ログインのすり抜け)・情報漏えい

②データの破壊など、被害が大きい


よくある間違い

「入力欄は、ただ文字を受け取るだけで危険はない」→ ✗  入力がそのままSQLとして実行されると、攻撃の入り口になる。

「入力のチェックさえすれば、それだけで安全だ」→ ✗  最重要はプレースホルダ。複数の対策を重ねて守る。

「SQLインジェクションは、データベースとは関係ない攻撃だ」→ ✗  入力からSQLを注入し、データベースを不正に操作する攻撃。


試験での出題パターン

実際の問題でたしかめてみよう。

オリジナル問題1(攻撃のしくみ)

📝 オリジナル問題 1 SQLインジェクションのしくみ

SQLインジェクションに関する次の記述のうち、最も適切なものはどれか。

  1. 社員の出退勤を記録して、毎月の給与を計算するためのしくみだ
  2. 取引先へ毎月の請求書を郵送する、決まった事務作業のことを指す
  3. 入力欄から悪意のSQLを注入し、DBを不正に操作する攻撃だ
  4. 完成したシステムを宣伝して、より多く売るための広告活動である
エーアイコアラ
エーアイコアラ 解答・解説

解答は 3 です。

SQLインジェクションは、入力欄から悪意のあるSQLを注入し、データベースを不正に操作する攻撃なのです。入力がそのままSQLとして実行されるのが原因なります。

選択肢1は給与計算、選択肢2は請求書の事務、選択肢4は広告で、どれも違うのです。

選択肢判定理由
1給与計算のしくみではない
2請求書の事務の話
3悪意のSQLを注入する攻撃で正しい
4広告活動ではない

オリジナル問題2(影響)

📝 オリジナル問題 2 SQLインジェクションの影響

SQLインジェクションの影響に関する次の記述のうち、最も適切なものはどれか。

  1. 認証回避や情報漏えい、データの破壊などを招くものである
  2. 社員の給与を計算するときだけ、起きるとされているものだ
  3. 取引先への請求書の枚数しだいで、決まるとされているのだ
  4. システムの動きが、少しだけ速くなるとされているのである
エーアイコアラ
エーアイコアラ 解答・解説

解答は 1 です。

SQLインジェクションは、認証回避(ログインのすり抜け)や情報漏えい、データの破壊などを招くのです。被害が大きいなります。

選択肢2の給与、選択肢3の請求書、選択肢4の「速くなる」は、いずれも違うのです。

選択肢判定理由
1認証回避・情報漏えい等で正しい
2給与計算のときだけではない
3請求書の枚数で決まるのではない
4速くなるものではない

オリジナル問題3(対策)

📝 オリジナル問題 3 SQLインジェクションの対策

SQLインジェクションの対策に関する次の記述のうち、最も適切なものはどれか。

  1. 社員の給与を計算するときだけ、必要だとされているものである
  2. プレースホルダ(パラメータ化クエリ)が、最重要の対策である
  3. 取引先への請求書を郵送するときだけ、必要だとされているのだ
  4. 対策は、いっさい必要ないものだとされているものなのである
エーアイコアラ
エーアイコアラ 解答・解説

解答は 2 です。

対策は、プレースホルダ(パラメータ化クエリ)が最重要なのです。入力検証やエスケープなどを重ねて守るなります。

選択肢1の給与、選択肢3の請求書、選択肢4の「必要ない」は、いずれも違うのです。

選択肢判定理由
1給与計算のときだけではない
2プレースホルダが最重要で正しい
3請求書のときだけではない
4対策は重ねて行う

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る