---
title: "Webアプリ攻撃まとめ｜SQLインジェクション・XSS・CSRFを整理【SG試験】"
description: "Webアプリ攻撃は入力値や利用者操作、セッションを悪用する攻撃です。SG試験で問われやすいSQLインジェクション、XSS、CSRFなどの違いと判断基準を整理します。 試験対策として重要語の定義・具体例・よくある誤解をまとめ、短時間で復習できるように整理しています。"
last_modified_at: "2026-06-04"
canonical_url: "https://stemtazoo.github.io/sg/web-application-attacks-summary/"
section: "sg"
---

## まず結論

- Webアプリ攻撃は、**「何を悪用する攻撃か」**で分類すると判断しやすくなります。
- SG試験では、攻撃名を暗記するだけでなく、**入力値・利用者操作・セッション・通信経路**のどれが狙われているかを見抜くことが重要です。
- 特に、SQLインジェクション・XSS・CSRFは名前が似ていなくても、問題文では混同しやすい形で出ます。

## 全体像

Webアプリ攻撃は、利用者とWebサーバの間で行われる処理のすき間を狙います。

1. 入力値を悪用して、サーバ側の処理を変える
2. 利用者のブラウザで、意図しない処理を実行させる
3. ログイン状態やセッション情報を悪用する
4. 通信や画面表示を利用して、利用者をだます

つまり、問題文を読んだらまず **「サーバがだまされるのか、利用者がだまされるのか」** を確認します。

## 主要用語の整理

| 用語 | 判断基準 |
|---|---|
| [SQLインジェクションとは？仕組みと対策をやさしく理解【SG試験】](https://stemtazoo.github.io/sg/sql-injection/) | 入力値にSQL文を混ぜ、データベース処理を不正に実行する攻撃か |
| [クロスサイトスクリプティングとは？スクリプト実行の仕組み【SG試験】](https://stemtazoo.github.io/sg/xss/) | Webページにスクリプトを埋め込み、利用者のブラウザで実行させる攻撃か |
| [クロスサイトリクエストフォージェリとは？なりすまし操作の仕組み【SG試験】](https://stemtazoo.github.io/sg/csrf/) | ログイン済み利用者に、意図しないリクエストを送らせる攻撃か |
| [クリックジャッキングとは？見えない操作誘導の仕組み【SG試験】](https://stemtazoo.github.io/sg/clickjacking/) | 見えない画面や重ねた画面で、利用者に意図しないクリックをさせる攻撃か |
| [ディレクトリトラバーサルとは？不正ファイルアクセスの仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/directory-traversal/) | `../` などで本来見られないファイルへアクセスする攻撃か |
| [セッションハイジャックとは？ログイン乗っ取りの仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/session-hijacking/) | セッションIDなどを盗み、ログイン状態を乗っ取る攻撃か |
| [中間者攻撃とは？通信を盗み見る仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/man-in-the-middle-attack/) | 通信経路の途中に入り、盗聴や改ざんを行う攻撃か |
| [Man-in-the-Browserとは？ブラウザ内改ざん攻撃の仕組み【SG試験】](https://stemtazoo.github.io/sg/man-in-the-browser/) | 利用者のブラウザ内で通信内容や表示内容を改ざんする攻撃か |


## OSコマンドインジェクションを即判定するキーワード

SG試験では、次の語が問題文に出たら **OSコマンドインジェクション** を最優先で疑います。

- `system()`、`exec()`、`popen()` などの外部プログラム呼び出し関数
- 「シェルスクリプトを実行」「実行形式ファイルを起動」
- 「サーバ上でコマンドが実行される」

### ひっかけ回避の切り分け

- **OSコマンドインジェクション**：OSコマンド実行が主語
- **SQLインジェクション**：SQL文・DB操作が主語
- **CSRF**：ログイン済み利用者の操作悪用が主語
- **セッションハイジャック**：セッションID奪取が主語

> 迷ったら「最終的に何が実行されるか」を見ます。  
> OSコマンドなら、OSコマンドインジェクションです。

## SG試験でのひっかけポイント

| 迷いやすい組合せ | 切り分けのポイント |
|---|---|
| SQLインジェクション vs XSS | SQLはサーバ側のDB処理を悪用。XSSは利用者ブラウザでスクリプトを実行 |
| XSS vs CSRF | XSSはスクリプト実行。CSRFはログイン済み利用者に不正リクエストを送らせる |
| CSRF vs セッションハイジャック | CSRFは本人の認証状態を利用。セッションハイジャックはセッション自体を奪う |
| クリックジャッキング vs フィッシング | クリックジャッキングは画面操作の誘導。フィッシングは偽サイトなどで情報入力を誘導 |
| 中間者攻撃 vs Man-in-the-Browser | 中間者攻撃は通信経路。Man-in-the-Browserは利用者端末内のブラウザ |

## 攻撃名と対策名の対応（正しい組合せ / 間違いやすい組合せ）

| 攻撃 | 有効な対策（例） | 間違いやすい対策（例） | 切り分けの一言 |
|---|---|---|---|
| SQLインジェクション | SQL文を直接連結せず、プレースホルダ（バインド変数）を使う | セッション管理だけで防ごうとする | SQLインジェクションは「DBへの命令混入」の対策を選ぶ |
| クロスサイトスクリプティング（XSS） | 出力時にエスケープする。必要に応じてCSPを併用する | 信頼できない外部コンテンツを無条件に取り込む | XSSは「ブラウザで不正スクリプト実行」を止める対策を選ぶ |
| クロスサイトリクエストフォージェリ（CSRF） | CSRFトークンを確認する。状態変更処理に推測しやすい要求だけを使わない | HTTPメソッドの選択だけで防ごうとする | CSRFは「ログイン済み利用者に意図しないリクエストを送らせる」攻撃を防ぐ |
| セッションハイジャック | 推測困難で利用者ごとに異なるセッションIDを使い、ログイン後に再発行する | 変化しない識別子を長期間使い続ける | セッションハイジャックは「ログイン状態の乗っ取り」を防ぐ対策を選ぶ |
| ディレクトリトラバーサル | `../` を悪用できないよう、ファイルパスを検証・制限する | 出力エスケープだけで対応しようとする | ディレクトリトラバーサルは「不正ファイル参照」を防ぐ対策を選ぶ |
| OSコマンドインジェクション | 外部入力をコマンド文字列に埋め込まない。安全なAPI利用や実行権限最小化を行う | セッションID管理だけで対応しようとする | OSコマンドインジェクションは「サーバでの不正コマンド実行」を防ぐ対策を選ぶ |

### 選択肢を切るときの順番

1. 問題文の主語が「DB / ブラウザ / ファイル / セッション / OSコマンド」のどれかを先に特定する。  
2. 攻撃の主語と、対策の主語が一致している選択肢を残す。  
3. 「別攻撃には有効だが、今回の攻撃には無効」な選択肢を先に消す。  

### 安全なWebアプリケーション問題での組合せトラップ

SG試験では、攻撃名と対策の組合せを入れ替えて出すことがあります。

- SQLインジェクション + プレースホルダ
  → 正しい組合せ。入力値をSQL文の構造から分離します。

- XSS + 信頼できない外部コンテンツの無条件取込み
  → 不適切。外部コンテンツを無条件に信頼する方向は対策ではありません。

- CSRF + 推測しやすい単純なリクエストだけで状態変更する
  → 不適切。重要な状態変更を簡単なリクエストだけで実行できると、むしろ意図しない操作の危険が高まります。

- セッションハイジャック + 変化しないセッション識別子
  → 不適切。固定的なIDは推測・悪用されやすく、ログイン後のセッションID再発行などが必要です。

## おすすめの学習順序

1. [SQLインジェクションとは？仕組みと対策をやさしく理解【SG試験】](https://stemtazoo.github.io/sg/sql-injection/)
2. [クロスサイトスクリプティングとは？スクリプト実行の仕組み【SG試験】](https://stemtazoo.github.io/sg/xss/)
3. [クロスサイトリクエストフォージェリとは？なりすまし操作の仕組み【SG試験】](https://stemtazoo.github.io/sg/csrf/)
4. [セッションハイジャックとは？ログイン乗っ取りの仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/session-hijacking/)
5. [クリックジャッキングとは？見えない操作誘導の仕組み【SG試験】](https://stemtazoo.github.io/sg/clickjacking/)
6. [ディレクトリトラバーサルとは？不正ファイルアクセスの仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/directory-traversal/)
7. [中間者攻撃とは？通信を盗み見る仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/man-in-the-middle-attack/)

## 記事一覧

### 入力値を悪用する攻撃

- [SQLインジェクションとは？仕組みと対策をやさしく理解【SG試験】](https://stemtazoo.github.io/sg/sql-injection/)
- [ディレクトリトラバーサルとは？不正ファイルアクセスの仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/directory-traversal/)

### 利用者のブラウザや操作を悪用する攻撃

- [クロスサイトスクリプティングとは？スクリプト実行の仕組み【SG試験】](https://stemtazoo.github.io/sg/xss/)
- [クロスサイトリクエストフォージェリとは？なりすまし操作の仕組み【SG試験】](https://stemtazoo.github.io/sg/csrf/)
- [クリックジャッキングとは？見えない操作誘導の仕組み【SG試験】](https://stemtazoo.github.io/sg/clickjacking/)

### 認証状態や通信を悪用する攻撃

- [セッションハイジャックとは？ログイン乗っ取りの仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/session-hijacking/)
- [中間者攻撃とは？通信を盗み見る仕組みと対策【SG試験】](https://stemtazoo.github.io/sg/man-in-the-middle-attack/)
- [Man-in-the-Browserとは？ブラウザ内改ざん攻撃の仕組み【SG試験】](https://stemtazoo.github.io/sg/man-in-the-browser/)

## まとめ（試験直前用）

- SQLインジェクションは、入力値でDB処理を悪用する。
- XSSは、利用者のブラウザでスクリプトを実行させる。
- CSRFは、ログイン済み利用者に不正なリクエストを送らせる。
- セッションハイジャックは、ログイン状態そのものを乗っ取る。
- 迷ったら「サーバ・ブラウザ・セッション・通信経路」のどれが狙われたかで切る。
