sg sg-technology web security attack
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?
です。
「悪いコードはどこで動くのか?」と考えると、選択肢を切りやすくなります。