---
title: "XSSとSQLインジェクションの違い｜入力された文字列が「どこで悪さをするか」で切り分ける"
description: "XSSとSQLインジェクションは、どちらも入力値の扱いを悪用する攻撃ですが、悪さをする場所が異なります。XSSは利用者のブラウザ、SQLインジェクションはDBへの命令が中心です。攻撃対象、被害、入力検証の観点からSG試験で切り分ける基準を整理します。"
last_modified_at: "2026-06-21"
canonical_url: "https://stemtazoo.github.io/sg/xss-vs-sql-injection/"
section: "sg"
---

# XSSとSQLインジェクションの違い｜入力された文字列が「どこで悪さをするか」で切り分ける

## まず結論

XSSとSQLインジェクションは、どちらも**入力された文字列を悪用する攻撃**です。

ただし、切り分けるポイントはシンプルです。

- **ブラウザでスクリプトが実行される** → XSS
- **データベースへの命令が不正に変わる** → SQLインジェクション

つまり、試験では

> その不正な文字列は、最終的にどこで悪さをするのか？

を見ると切り分けやすくなります。

## 直感的な説明

XSSは、Webページに**悪いスクリプトを混ぜる攻撃**です。

利用者がそのページを開くと、ブラウザ上で不正なスクリプトが動きます。

たとえるなら、

> 掲示板や入力フォームに、見た人のブラウザで動く「悪いメモ」を貼り付ける

ようなイメージです。

一方、SQLインジェクションは、データベースに送られる命令を**不正に書き換える攻撃**です。

たとえるなら、

> 検索窓やログイン画面に、データベースへの「悪い命令」をまぎれ込ませる

ようなイメージです。

## 定義・仕組み

### XSSとは

XSS（クロスサイトスクリプティング）は、Webアプリケーションの不備を利用して、Webページに不正なスクリプトを埋め込む攻撃です。

代表的な被害は次のようなものです。

- Cookieやセッション情報を盗まれる
- 偽の入力画面に誘導される
- 利用者のブラウザ上で意図しない処理が実行される

ポイントは、**攻撃の影響が利用者のブラウザ側に出やすい**ことです。

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

SQLインジェクションは、Webアプリケーションがデータベースに送るSQL文に、不正な文字列を混ぜる攻撃です。

代表的な被害は次のようなものです。

- データベースの情報を不正に取得される
- データを改ざんされる
- データを削除される
- 認証を不正に回避される

ポイントは、**攻撃の影響がデータベース側に出やすい**ことです。

## どんな場面で使う？

試験問題では、次のような表現が出たらXSSを疑います。

| 表現 | 考え方 |
|---|---|
| スクリプトを埋め込む | ブラウザで実行される可能性が高い |
| Cookieを盗む | 利用者側の情報を狙っている |
| 偽画面を表示する | Webページの表示内容を悪用している |
| 利用者がリンクをクリックする | 被害者のブラウザで動作する流れ |

一方、次のような表現が出たらSQLインジェクションを疑います。

| 表現 | 考え方 |
|---|---|
| SQL文 | ほぼSQLインジェクションを疑う |
| データベース | SQLインジェクションの可能性が高い |
| データの不正取得・改ざん・削除 | DB操作の不正利用 |
| ログイン認証の回避 | SQL条件を書き換える攻撃の典型 |

## よくある誤解・混同

### 誤解1：どちらも入力フォームを使うから同じ

これは混同しやすいポイントです。

XSSもSQLインジェクションも、入力フォームやURLパラメータが入口になることがあります。

ただし、試験では入口よりも、**悪さをする場所**で判断します。

- XSS：ブラウザでスクリプトが動く
- SQLインジェクション：データベースへの命令が変わる

### 誤解2：Cookieが出てきたらSQLインジェクション

Cookieは、基本的に利用者のブラウザ側で扱われる情報です。

そのため、

> Cookieを盗む

という表現があれば、XSSを疑います。

SQLインジェクションは、Cookieそのものを盗むというより、データベースの情報を不正に操作する攻撃です。

### 誤解3：「不正な文字列を入力」とあればSQLインジェクション

「不正な文字列を入力」は、どちらにも当てはまることがあります。

そのため、この表現だけでは決めない方が安全です。

次の一文を見ます。

- その文字列が**スクリプトとして実行される** → XSS
- その文字列が**SQL文として解釈される** → SQLインジェクション

## 試験での切り分けポイント

### 1. 「実行される場所」を見る

最初に見るのは、攻撃コードがどこで実行されるかです。

- 利用者のブラウザ → XSS
- データベース → SQLインジェクション

ここが一番強い判断軸です。

### 2. 「盗まれるもの」を見る

次に、何が被害にあうかを見ます。

- Cookie、セッション、画面表示 → XSS
- DB内の顧客情報、ID、パスワード、注文データ → SQLインジェクション

### 3. 「問題文のキーワード」を拾う

最後に、問題文のキーワードを拾います。

- スクリプト、Cookie、偽画面、リンククリック → XSS
- SQL、データベース、SELECT、UPDATE、DELETE → SQLインジェクション

## 例題で確認

次の説明はどちらでしょうか。

> Webアプリケーションの入力欄に不正な文字列を入力し、データベースの情報を不正に取得する。

これは**SQLインジェクション**です。

理由は、被害がデータベースに向かっているからです。

次の説明はどうでしょうか。

> 攻撃者が用意したリンクを利用者がクリックすると、不正なスクリプトがWebページのレスポンスに埋め込まれ、利用者のブラウザで実行される。

これは**XSS**です。

理由は、不正なスクリプトが利用者のブラウザで動くからです。

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

XSSとSQLインジェクションは、どちらも入力値の扱いの不備を突く攻撃です。

ただし、試験では次の3点で切り分けます。

- **ブラウザでスクリプトが動く** → XSS
- **データベースへの命令が変わる** → SQLインジェクション
- **CookieならXSS、DBの取得・改ざん・削除ならSQLインジェクション**

英語で覚えるなら、

> Where does the malicious code run?

です。

「悪いコードはどこで動くのか？」と考えると、選択肢を切りやすくなります。
