Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
XSS?なんですかそれ?
Search
ryoAccount
July 20, 2025
Technology
70
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
XSS?なんですかそれ?
Security.any #05 今だから言えるセキュリティLT 登壇資料
https://security-any.connpass.com/event/356209/
ryoAccount
July 20, 2025
More Decks by ryoAccount
See All by ryoAccount
あなたの知らないFirewallの世界
ryoaccount
0
33
そこにAIはあるか?
ryoaccount
0
64
最大のアウトプット術は問題を作ること
ryoaccount
0
430
Code Reliability
ryoaccount
0
18
S3は問答無用で非公開!!
ryoaccount
0
29
0から始めるセキュリティ
ryoaccount
0
130
エンジニアが考えるUI/UX
ryoaccount
0
23
Other Decks in Technology
See All in Technology
ゴールデンパスは敷いただけでは道にならない ─ 企画部門のエンジニアが技術標準を事業価値に変えるまで
mhrtech
0
140
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
220
プロダクトだけじゃない、社内プロセスにおける自動化・省力化ノススメ
kakehashi
PRO
1
3.6k
生成AIの活用/high_school2026
okana2ki
0
130
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
310
Road to SRE NEXTの今までとこれから
hiroyaonoe
0
310
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.8k
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
150
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.4k
Keeping applications secure by evolving OAuth 2.0 and OpenID Connect
ahus1
PRO
1
160
cccccc
moznion
0
1.9k
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
230
Featured
See All Featured
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Documentation Writing (for coders)
carmenintech
77
5.4k
The Invisible Side of Design
smashingmag
301
52k
Test your architecture with Archunit
thirion
1
2.3k
A Soul's Torment
seathinner
6
3.1k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
2k
For a Future-Friendly Web
brad_frost
183
10k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
Amusing Abliteration
ianozsvald
1
220
Google's AI Overviews - The New Search
badams
0
1.1k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
Transcript
Security.any #05 今だから言えるセキュリティLT 2025.07.16 RYO XSS?なんですかそれ?
某人材系サービスを展開するテック企業にて主に 認証基盤の開発やセキュリティ向上の推進に従事 どうすればDevSecOpsを組織に浸透させられるか 日々悩み中 好きな脆弱性はXSS 2 RYO X @RYO_nami
(おさらい)XSS ? • XSS(Cross-Site Scripting)は、悪意のあるスクリプトをWebページ に埋め込み、ブラウザ上で実行させる攻撃手法 • 入力フォームやURLパラメータなどを通じてスクリプトを注入し、以下のよ うな被害を引き起こす ◦
Cookieやセッション情報の搾取 ◦ フィッシングサイトへの誘導 ◦ Webページの見た目や内容の改ざん • 大きく3種類ある ◦ 反射型:攻撃者が作成したリンクをクリックすることで、スクリプトが実行される ◦ 格納型:スクリプトがサーバに保存され、他ユーザに配信される ◦ DOM-based:WebページのHTMLが書き換えられて、スクリプトが実行される
あの頃は...
あの頃は... XSS なんて知らんかったなぁ...
XSSとの出逢い • エンジニア(いわゆるSE)として社会人生活スタート🌸 • 新卒として最初に配属されたプロジェクトで、MVCモデルで作られたWebサ イトの開発・保守を担当することになった • 初めてHTMLに触れる(当時はまだHTML4.01の頃) • 当時はまだまだガラケーが主流、WindowsはXPが主流、ブラウザはIEが主
流、アイドルはAKB48が主流
当時はこんなエラーメッセージを出していた メールアドレス 環境依存文字が含まれています: error_㈱@gmail.com error_㈱@gmail.com なぜかテキストボックスに入力された文字を 全量出すというやや謎の仕様だった (当時は㈱や㍑や①などが許容されていなかった)
当時の私はふと思った メールアドレス 環境依存文字が含まれています: error_㈱@gmail.com error_㈱@gmail.com メールアドレスにhtmlタグ入れたら どうなるんやろ??
htmlタグ入れてみた メールアドレス 環境依存文字が含まれています: <input type="text" value="㈱" /> ㈱
htmlタグ入れてみた メールアドレス 環境依存文字が含まれています: <input type="text" value="㈱" /> ㈱ テキストボックスになるやないか/(^o^)\
当時の私はさらにふと思った メールアドレス 環境依存文字が含まれています: <input type="text" value="㈱" /> ㈱ JavaScriptのコード入れたら どうなるんやろ??
scriptタグ入れてみた メールアドレス 環境依存文字が含まれています: <script>alert("㈱")</script> (domain).com ㈱ OK
scriptタグ入れてみた メールアドレス 環境依存文字が含まれています: <script>alert("㈱")</script> (domain).com ㈱ OK アラートダイアログ出るやないか/(^o^)\
そして、XSSとの別れ(?) • 当時は「入力がhtmlとして解釈されるのか、おもろいなぁ~」くらいの軽い 気持ちで受け流していた • 結局、堅苦しい会社の規則に嫌気がさして、XSSを見なかったことにして、 プロジェクトを去るのでした...(転職)
XSSは今も昔も注意すべき存在 昔:2010年の記事(ITmedia)
XSSは今も昔も注意すべき存在 今:2025年の記事(ITmedia)
XSSの対策方法 • 出力時のエスケープ処理( 例:< → < ) ◦ VueやReactなどのフレームワークは自動的にエスケープ処理を行ってくれる •
Content Security Policy(CSP)の導入 • outerHTML/innerHTMLの使用を避ける • セキュリティ診断の実施&検出
XSSの対策方法 • 出力時のエスケープ処理( 例:< → < ) ◦ VueやReactなどのフレームワークは自動的にエスケープ処理を行ってくれる •
Content Security Policy(CSP)の導入 • outerHTML/innerHTMLの使用を避ける • セキュリティ診断の実施&検出 ここに関しては最近、 HTMLの仕様に変更が!
HTML:属性値内の < と > がエスケープされるように!! chrome for developers (2025/06/12)
Q. 次のconsole.log()の出力結果は? <div data-content="<p>hello</p>"></div> <script> const div = document.querySelector("div"); console.log(div.outerHTML);
// ★ </script>
Q. 次のconsole.log()の出力結果は? <div data-content="<p>hello</p>"></div> <script> const div = document.querySelector("div"); console.log(div.outerHTML);
// ★ </script> A. <div data-content="<p>hello</p>"></div>
Q. 次のconsole.log()の出力結果は? <div data-content="<p>hello</p>"></div> <script> const div = document.querySelector("div"); console.log(div.outerHTML);
// ★ </script> 属性値内の < と > がエスケープされるようになった A. <div data-content="<p>hello</p>"></div>
変わったのは? • HTML文字列を取得する場合のみ、< と > がエスケープされる ◦ innerHTML ◦ outerHTML
◦ getHTML() • DOM APIを使って属性値を取得する場合、以前と変わらず ◦ dataset ◦ attributes ◦ getAttributes()
なぜこの変更が必要だったのか? • ミューテーションXSS(mXSS)を防ぐため ◦ mXSS:ブラウザのHTMLパーサやDOMの自動修正機能を悪用する XSS • 通常のXSS対策では入力値のエスケープやサニタイズを行うが、mXSSではブ ラウザが勝手に「元に戻して」しまうため、意図せずスクリプトが復元され てしまう
◦ 例:攻撃者が一見すると無害な HTMLタグを仕込む ▪ <svg><desc><img src=x onerror=alert('XSS')></desc></svg> ◦ ブラウザがHTMLをパースする際、 <img > を <img> タグに変換してしまう ▪ <svg><desc><img src=x onerror=alert('XSS')></desc></svg> ◦ onerror=alert(“XSS”) が発火し、XSSが成立
いつからブラウザに反映される? • Chrome: 反映済み(ver138) • Firefox: 反映済み(ver140) • Safari: 2025年9月予定(ver26)
まとめ • XSSは悪意のあるスクリプトをWebページに埋め込み、ブラウザ上で実行さ せる攻撃手法 • XSSは昔からあるが今も現役で悪用されている危険な脆弱性 • HTMLの仕様が変更されmXSSに対して安全性が増した • とは言っても、まだ全てのブラウザに適用されたわけではないので、開発者
は今後も引き続きXSS対策が必要 ◦ (セキュリティ対策に終わりはない ...)
ご清聴ありがとうございました