# XSS — 他人のブラウザで悪いスクリプトを動かす攻撃

> レベル: 初級 ／ 対象: 大人
> 出典: Kotowary — https://kotowary.com/learn/units/xss?level=beginner&audience=adult
**XSS**（クロスサイトスクリプティング）は、**他人のブラウザで、攻撃者のスクリプトを動かす**攻撃です。

## どう起きる？

たとえばコメント欄に、攻撃者が「スクリプト入りの文字列」を書き込む。サービスがそれを**そのまま画面に表示**すると、そのページを見た人のブラウザで、そのスクリプトが実行されてしまいます。

結果、**Cookie（ログイン状態）を盗まれる**、勝手に操作される、などの被害が起きます。

::diagram{name="xss-attack"}

## どう防ぐ？

1. **出力エスケープ** — 画面に出すとき、`<` や `>` などを「ただの文字」に変換する。これでスクリプトとして動かない
2. **文脈に合わせる** — HTML・属性・URL・JS の中で、必要なエスケープが違う
3. **CSP（コンテンツセキュリティポリシー）** — そもそも許可していないスクリプトの実行を、ブラウザ側で止める

ポイントは「**入力を消す**のではなく、**出力を安全にする**」こと。データは受け取ってよく、出す瞬間に無害化します。

## ⚠️ 気をつける

- **入力検証だけに頼る** — 保存された値が別の画面で出るときに漏れる（格納型XSS）
- **エスケープの文脈ミス** — HTML用のエスケープをURLやJSにそのまま使う
- **innerHTML の乱用** — 受け取った文字列をそのままHTMLとして挿入しない
