最終更新日:2026年5月21日
sg threat_vulnerability unauthorized_access database sg-security-overview
まず結論
- SQLインジェクションとは、入力値にSQL文を混入させてデータベースを不正操作する攻撃です。
- SG試験では「入力値をそのまま使っているかどうか」を見抜けるかがポイントです。
直感的な説明
SQLインジェクションは「注文にこっそり命令を混ぜる」イメージです。
たとえば、ログイン画面で
「ユーザー名」を入力するはずなのに、
’’’ ‘OR ‘1’=’1 ‘’’
のような不正な文字列を入れると、
システムがそれをSQL文として解釈してしまい、
本来ありえない動き(認証突破など)が起きます。
👉 本来は「値」なのに「命令」として扱われてしまうのが問題です。
定義・仕組み
SQLインジェクションとは、
入力フォームなどにSQL文の一部を埋め込み、
データベースに対して意図しない操作を実行させる攻撃
です。
典型的な原因:
- 入力値をそのままSQLに連結している
- 入力チェック(バリデーション)が不十分
基本的な流れ:
- ユーザーが入力欄に悪意ある文字列を入力
- そのままSQL文に組み込まれる
- データベースがそれを実行してしまう
結果として:
- 認証回避
- データの漏えい
- データの改ざん
などが発生します。
どんな場面で使う?
攻撃されやすい場面
- ログイン画面
- 検索フォーム
- 問い合わせフォーム
👉 「ユーザー入力をDBに渡す処理」はすべて対象です。
対策が必要な場面
- Webアプリケーション全般
- 外部入力を扱うシステム
👉 SG試験では
「入力値の扱い」が問われることが多いです。
よくある誤解・混同
❌ よくある誤解
- 「通信を盗み見る攻撃」
- 「プログラムを制限する仕組み」
⭕ 正しい理解
- 入力値を悪用してデータベースを操作する攻撃
SG試験でのひっかけ
SG試験では次のように混同させてきます。
- 「通信内容を検知して遮断」
→ WAF - 「実行環境を制限する」
→ サンドボックス - 「入力値を悪用してDB操作」
→ SQLインジェクション(これが正解)
👉 選択肢では
「SQL文の中に不正な入力を埋め込む」と書かれていたらSQLインジェクションです。
誤解2:SQLインジェクション対策はパケットフィルタリングで十分
これは誤りです。
パケットフィルタリングは、主にIPアドレスやポート番号などの条件で通信を制御する仕組みです。
一方、SQLインジェクションは、正当なHTTP通信の中に含まれた入力値が原因で起きます。
そのため、SG試験では次のように切り分けます。
- 「IPアドレス・ポート番号で遮断」→ パケットフィルタリングの説明
- 「入力値を無害化・SQL構造から分離」→ SQLインジェクション対策
誤解3:フィッシングとSQLインジェクションは同じ種類の攻撃
これも誤りです。
フィッシングは、偽サイトや偽メールなどで利用者に情報を入力させるだます攻撃です。
SQLインジェクションは、Webアプリの入力処理不備を突いて、データベース命令を不正化する技術的な注入攻撃です。
- 「利用者をだまして入力させる」→ フィッシング
- 「入力値でSQL文を壊す」→ SQLインジェクション
誤解4:サニタイジングはXSS専用で、SQLインジェクションには無関係
これは不正確です。
SG試験の文脈でいうサニタイジング(無害化)は、入力値や出力値を文脈に合わせて安全に扱う考え方です。
SQLインジェクション対策では、第一選択はプレースホルダ(バインド変数)ですが、 加えて入力値の検証や無害化を適切に行うことでリスク低減につながります。
ただし、単純な文字除去だけに依存するのは危険です。試験では、
- 「プレースホルダでSQL構造を分離」→ より適切
- 「禁止文字を削るだけ」→ 不十分になりやすい
と判断しましょう。
確認問題(SG試験対策)
次のうち、SQLインジェクション対策として最も適切なものはどれか。
- ア. 入力値をSQL文へ直接連結せず、プレースホルダなどで安全に扱う。
- イ. 利用者全員に管理者権限を与え、エラーを減らす。
- ウ. データベースのパスワードを画面に表示して確認しやすくする。
- エ. 入力値の検査をやめ、SQLエラーの詳細を利用者へ表示する。
▶ クリックして答えと解説を見る(ここを開く)
正解:ア
解説
- ア:SQL文の構造として解釈されないように扱うことが重要です。
- イ:権限過剰で被害が大きくなります。
- ウ:認証情報の漏えいにつながります。
- エ:攻撃の手掛かりを与え、危険です。
👉 判断ポイント SQLインジェクションは「入力値がSQL文として実行される」ことを防ぐ。
まとめ(試験直前用)
- SQLインジェクション=入力値を使ったDB不正操作攻撃
- 原因は「入力値をそのままSQLに使うこと」
- 対策は
→ プレースホルダ(バインド変数)
→ 入力チェック - SG試験では
→ 「入力値の扱い」に注目して判断する