| 比較 | CSRF | XSS |
|---|---|---|
| 主な目的 | 利用者に操作させる | 正規サイト上でスクリプトを動かす |
| レスポンスの読取り | 通常は困難 | 可能 |
| Cookieの値 | 知らなくても成立する | HttpOnlyでなければ盗める場合がある |
| 攻撃場所 | 外部サイトなど | 脆弱な正規サイト内 |
| 主な対策 | CSRFトークン、SameSite、Origin検証 | 出力エスケープ、CSP、サニタイズ |
XSSが存在すると、正規ページからCSRFトークンを読み取ったり、正規オリジンからリクエストを送ったりできます。
そのため、OWASPもXSSによってCSRF対策が破られ得ると注意しています。
CSRF対策を強化しても、XSSを放置してよいわけではありません。
CORSは、別オリジンのJavaScriptがレスポンスを読み取れるかどうかを制御する仕組みです。
CSRFは、レスポンスを読めなくても攻撃できます。
そのため、CORSを無効にしただけではCSRF対策になりません。
また、次の組み合わせは危険です。
Access-Control-Allow-Origin: https://evil.example
Access-Control-Allow-Credentials: true
任意Originを動的反射し、Cookie送信を許可する設定も危険です。