【くろすさいとすくりぷてぃんぐ】

XSS(クロスサイトスクリプティング) とは?

💡 Webページに「罠のスクリプト」を仕込む攻撃
📌 このページのポイント
XSS:クロスサイトスクリプティング 攻撃者 スクリプト注入 Webアプリ (脆弱なサイト) ユーザー (被害者) ① スクリプトを注入 <script>悪意のコード</script> ② ページ閲覧 ③ スクリプト実行 Cookie・個人情報を窃取 ④ 盗んだデータを送信 対策:入力のサニタイズ・エスケープ処理・CSP(Content Security Policy) 悪意あるスクリプトを他のユーザーのブラウザで実行する攻撃
Webページにスクリプトを注入して情報を盗む攻撃手法
ひよこ ひよこ

XSSってどんな攻撃?

ペンギン先生 ペンギン先生

掲示板のコメント欄に「<script>document.cookie をハッカーのサーバーに送信</script>」と投稿すると、そのページを見た他のユーザーのブラウザスクリプトが実行されて、Cookieが盗まれる。盗んだセッションCookieでそのユーザーになりすましてログインできてしまうんだ

ひよこ ひよこ

3種類の違いは?

ペンギン先生 ペンギン先生

①Stored XSS(サーバーに保存されて全訪問者に影響。掲示板やコメント)、②Reflected XSS(URLパラメータに仕込んでリンクをクリックさせる)、③DOM-based XSS(JavaScriptDOM操作で発生。サーバーを介さない)。Storedが最も危険で、影響範囲が広いよ

ひよこ ひよこ

対策方法は?

ペンギン先生 ペンギン先生

①出力エスケープ(HTMLに出力する際に<>&"をエスケープ)が最重要。ReactはJSX内で自動エスケープしてくれる。②CSPContent Security Policy)ヘッダでインラインスクリプトの実行を禁止、③httpOnly Cookieスクリプトからのアクセスを防止、④入力バリデーション多層防御が大事だよ

ひよこ ひよこ

dangerouslySetInnerHTMLって危険?

ペンギン先生 ペンギン先生

名前の通り危険だよ。Reactの自動エスケープをバイパスしてHTMLを直接挿入する機能。ユーザー入力をdangerouslySetInnerHTMLに渡すとXSS脆弱性になる。どうしても使う場合はDOMPurifyなどのサニタイザーで事前にHTMLを浄化してから渡すこと。可能なら使わない方がいいね

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「XSS」って出てきたら「Webページに不正なスクリプトを埋め込む攻撃」と思えればだいたいOK!
📖 おまけ:英語の意味
「Cross-Site Scripting」 = クロスサイトスクリプティング
💬 CSSと区別するためにXSSと略される。別のサイト(Cross-Site)からScriptを注入する攻撃だよ
← 用語集にもどる