XSS・CSRFとは(全体像)
どちらも名前に「クロスサイト」が付くが、やることはまったく違う。ここを混同しやすいので、最初に対比で押さえる。
- XSS … ページに悪意のスクリプトを仕込み、それを見た人のブラウザで実行させる。例:掲示板の投稿にスクリプトを埋め込み、見た人のCookie(ログイン情報)を盗む。
- CSRF … 利用者がログイン中なのを悪用し、別の罠サイトから本人のふりをしたリクエストをサーバに送らせる。例:気づかないうちに振込が実行される。
押さえるのは、両者の違い、XSSの3種類と対策、CSRFの対策だ。
詳しく:種類と対策を押さえる
ここが心臓部。まずXSSの3種類と対策を整理する。
XSSの3種類と対策
| 区分 | 内容 |
|---|---|
| Reflected(反射型) | URLのパラメータ経由で、その場で送り返されて実行される |
| Stored(格納型) | DBに保存され、見た人みんなに影響(掲示板への埋め込みなど) |
| DOM-Based | ブラウザ側のDOM操作で発生する |
| 対策 | HTMLエスケープ・CSP・HTTPOnly Cookie |
次にCSRFの対策。
CSRFの対策
| 対策 | 内容 |
|---|---|
| CSRFトークン | リクエストごとに秘密の合言葉を付け、正規の画面から来たか照合する |
| SameSite Cookie | 別サイトからのリクエストにはCookieを付けない(Lax/Strict) |
| Origin/Referer検証 | どこから来たリクエストかを確かめる |
言葉を噛み砕いておく。
- XSSとCSRFの違い … XSSはスクリプトを実行させる、CSRFは本人になりすまして意図しない要求を送らせる。どちらも「クロスサイト」だが、やることが違う。
- CSP(Content Security Policy) … 「このページで動かしてよいスクリプトの出どころ」を制限するしくみ。XSS対策の柱。
- HTTPOnly Cookie … JavaScriptからCookieを読めなくする。ただしこれだけでXSSを完全に防げるわけではなく、CSPなども合わせて使う。
わかりやすく言い換えると
つまり、2つはこうたとえるとスッと入る。
XSSは、店の掲示板に毒入りのメモを貼るようなもの。それを読んだお客さん(ブラウザ)が、知らないうちに仕込まれた動作をさせられる。対策は、貼り紙の内容をそのまま実行せず無害な文字として表示する(エスケープ)、動かしてよいスクリプトの出どころを制限する(CSP)こと。
CSRFは、お客さんがログイン中なのを利用し、別の場所から本人のハンコを勝手に押させるようなもの。本人は気づかない。対策は、正規の画面から来た証拠の合言葉(CSRFトークン)を毎回確認し、別サイト由来のリクエストにはCookieを付けない(SameSite)ことだ。
試験のツボ
🔴 一番出る:XSSとCSRFの違い
①XSS=悪意のスクリプトを他人のブラウザで実行させる
②CSRF=ログイン中の利用者に意図しないリクエストを送らせる
🔴 次に出る:それぞれの対策
①XSS=HTMLエスケープ・CSP・HTTPOnly Cookie
②CSRF=CSRFトークン・SameSite Cookie
🟡 押さえると安定:XSSの3種類はReflected・Stored・DOM。HTTPOnlyだけでは完全には防げない
よくある間違い
①「XSSとCSRFは同じ攻撃だ」→ ✗ XSSはスクリプトを実行させる、CSRFは意図しない要求を送らせる。名前は似ているが別もの。
②「HTTPOnly Cookieを使えばXSSを完全に防げる」→ ✗ HTTPOnlyはJSからのCookie読み取りを防ぐが、それだけでは不十分。CSPなども合わせる。
③「CSRFの対策はHTMLエスケープだ」→ ✗ エスケープはXSS対策。CSRFはCSRFトークンやSameSite Cookieで防ぐ。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(XSSとCSRFの違い)
XSSとCSRFに関する次の記述のうち、正しいものはどれか。
- XSSもCSRFもまったく同じ攻撃の別名で、やることにも対策にも違いはないものとされているのが実情である
- XSSは悪意のスクリプトを他人のブラウザで実行させ、CSRFは意図しないリクエストを送らせる別の攻撃だ
- XSSはサーバの電源を切る作業、CSRFは画面を拡大する操作のことで、攻撃とは無関係とされているのである
- XSSは通信を暗号化する技術、CSRFはデータを圧縮する技術のことで、どちらも攻撃ではないとされている
解答は 2 である。
XSSは悪意のスクリプトを他人のブラウザで実行させる攻撃、CSRFはログイン中の利用者に意図しないリクエストを送らせる攻撃。名前は似ているが、やることは別だ。
選択肢1は「まったく同じ」が誤り。選択肢3の電源切り・画面拡大、選択肢4の暗号化・圧縮は、いずれも誤りだ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 同じではなくやることが違う |
| 2 | ✓ | XSS=実行・CSRF=意図しない要求で正しい |
| 3 | ✗ | 電源切りや画面拡大ではない |
| 4 | ✗ | 暗号化や圧縮の技術ではない |
オリジナル問題2(XSSの種類と対策)
XSSに関する次の記述のうち、正しいものはどれか。
- XSSには種類がいっさいなく、対策もまったく存在しないため防ぎようがないとされているのが実情である
- XSSの対策はサーバの電源を物理的に切ることだけで、エスケープやCSPは関係しないとされているものだ
- XSSにはReflected・Stored・DOMの3種類があり、おもな対策はエスケープやCSPなどである
- XSSはCSRFトークンとSameSite Cookieだけで完全に防げるため、ほかの対策はいっさい不要とされている
解答は 3 だ。
XSSにはReflected・Stored・DOMの3種類があり、対策はHTMLエスケープ・CSP・HTTPOnly Cookie。入力をそのまま実行させない工夫が柱になる。
選択肢1は「種類も対策もない」が誤り。選択肢2は「電源を切るだけ」が誤り。選択肢4のCSRFトークンやSameSiteはCSRF対策で、XSS用ではない。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 3種類があり対策もある |
| 2 | ✗ | 電源を切る対策ではない |
| 3 | ✓ | 3種類・エスケープ/CSP/HTTPOnlyで正しい |
| 4 | ✗ | トークンやSameSiteはCSRF対策 |
オリジナル問題3(CSRFの対策)
CSRFの対策に関する次の記述のうち、正しいものはどれか。
- CSRFの対策はCSRFトークンやSameSite Cookieで、意図しない要求を防ぐのが基本である
- CSRFはどんな方法でも防ぐことができず、対策を考えるだけ無駄な行為だとされているのが実情なのだ
- CSRFの対策は通信を暗号化することだけで、リクエストの出どころを確かめる必要はないとされているのだ
- CSRFの対策は画面の文字を大きくすることで、リクエストの正しさとはまったく関係がないとされているのだ
解答は 1 だ。
CSRFの対策は、CSRFトークン(正規の画面から来た証拠の合言葉)やSameSite Cookie(別サイトからのリクエストにCookieを付けない)。意図しない要求を防ぐのが基本だ。
選択肢2は「防げない」が誤り。選択肢3は「暗号化だけ」が誤り。選択肢4は「文字を大きくする」が誤りだ。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | CSRFトークン・SameSiteで正しい |
| 2 | ✗ | 対策はある |
| 3 | ✗ | 暗号化だけでは防げない |
| 4 | ✗ | 文字の大きさとは無関係 |
まとめ
押さえどころ
- 🔴 XSS = 悪意のスクリプトを他人のブラウザで実行させる攻撃。CSRF = ログイン中の利用者に意図しない要求を送らせる攻撃。別もの。
- 🔴 XSS対策=HTMLエスケープ・CSP・HTTPOnly Cookie。CSRF対策=CSRFトークン・SameSite Cookie。
- 🟡 XSSの3種類はReflected・Stored・DOM。HTTPOnlyだけでは完全には防げない(CSPも合わせる)。
次に学ぶ
- SQLインジェクション ── 同じく入力をねらう、データベースへの注入攻撃。
- OWASP Top 10 ── XSSやインジェクションが入る、Webアプリ脆弱性のワースト10。
- NWセキュリティ(FW・IDS/IPS・WAF) ── Webアプリへの攻撃を、入口で防ぐしくみ。
執筆: SikakuQuest編集部