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

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を注入する攻撃だよ
← 用語集にもどる