Skip to the content.

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?

です。

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

© 2024-2026 stemtazoo. All rights reserved.