XSS・CSRFとは?種類と対策

公開: 更新: カテゴリ: セキュリティ系

30秒で結論

XSS・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検証どこから来たリクエストかを確かめる

言葉を噛み砕いておく。

わかりやすく言い換えると

つまり、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の違い)

📝 オリジナル問題 1 XSSとCSRFの違い

XSSとCSRFに関する次の記述のうち、正しいものはどれか。

  1. XSSもCSRFもまったく同じ攻撃の別名で、やることにも対策にも違いはないものとされているのが実情である
  2. XSSは悪意のスクリプトを他人のブラウザで実行させ、CSRFは意図しないリクエストを送らせる別の攻撃だ
  3. XSSはサーバの電源を切る作業、CSRFは画面を拡大する操作のことで、攻撃とは無関係とされているのである
  4. XSSは通信を暗号化する技術、CSRFはデータを圧縮する技術のことで、どちらも攻撃ではないとされている
ピーエムロボ
ピーエムロボ 解答・解説

解答は 2 である。

XSSは悪意のスクリプトを他人のブラウザで実行させる攻撃、CSRFはログイン中の利用者に意図しないリクエストを送らせる攻撃。名前は似ているが、やることは別だ。

選択肢1は「まったく同じ」が誤り。選択肢3の電源切り・画面拡大、選択肢4の暗号化・圧縮は、いずれも誤りだ。

選択肢判定理由
1同じではなくやることが違う
2XSS=実行・CSRF=意図しない要求で正しい
3電源切りや画面拡大ではない
4暗号化や圧縮の技術ではない

オリジナル問題2(XSSの種類と対策)

📝 オリジナル問題 2 XSSの種類と対策

XSSに関する次の記述のうち、正しいものはどれか。

  1. XSSには種類がいっさいなく、対策もまったく存在しないため防ぎようがないとされているのが実情である
  2. XSSの対策はサーバの電源を物理的に切ることだけで、エスケープやCSPは関係しないとされているものだ
  3. XSSにはReflected・Stored・DOMの3種類があり、おもな対策はエスケープやCSPなどである
  4. XSSはCSRFトークンとSameSite Cookieだけで完全に防げるため、ほかの対策はいっさい不要とされている
ピーエムロボ
ピーエムロボ 解答・解説

解答は 3 だ。

XSSにはReflected・Stored・DOMの3種類があり、対策はHTMLエスケープ・CSP・HTTPOnly Cookie。入力をそのまま実行させない工夫が柱になる。

選択肢1は「種類も対策もない」が誤り。選択肢2は「電源を切るだけ」が誤り。選択肢4のCSRFトークンやSameSiteはCSRF対策で、XSS用ではない。

選択肢判定理由
13種類があり対策もある
2電源を切る対策ではない
33種類・エスケープ/CSP/HTTPOnlyで正しい
4トークンやSameSiteはCSRF対策

オリジナル問題3(CSRFの対策)

📝 オリジナル問題 3 CSRFの対策

CSRFの対策に関する次の記述のうち、正しいものはどれか。

  1. CSRFの対策はCSRFトークンやSameSite Cookieで、意図しない要求を防ぐのが基本である
  2. CSRFはどんな方法でも防ぐことができず、対策を考えるだけ無駄な行為だとされているのが実情なのだ
  3. CSRFの対策は通信を暗号化することだけで、リクエストの出どころを確かめる必要はないとされているのだ
  4. CSRFの対策は画面の文字を大きくすることで、リクエストの正しさとはまったく関係がないとされているのだ
ピーエムロボ
ピーエムロボ 解答・解説

解答は 1 だ。

CSRFの対策は、CSRFトークン(正規の画面から来た証拠の合言葉)やSameSite Cookie(別サイトからのリクエストにCookieを付けない)。意図しない要求を防ぐのが基本だ。

選択肢2は「防げない」が誤り。選択肢3は「暗号化だけ」が誤り。選択肢4は「文字を大きくする」が誤りだ。

選択肢判定理由
1CSRFトークン・SameSiteで正しい
2対策はある
3暗号化だけでは防げない
4文字の大きさとは無関係

まとめ

押さえどころ

次に学ぶ


執筆: SikakuQuest編集部

勉強は、クエストになった。

資格の勉強を、冒険に変えるRPG学習アプリ

App Storeで見る