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
63
0
Share
XSS?なんですかそれ?
Security.any #05 今だから言えるセキュリティLT 登壇資料
https://security-any.connpass.com/event/356209/
ryoAccount
July 20, 2025
More Decks by ryoAccount
See All by ryoAccount
最大のアウトプット術は問題を作ること
ryoaccount
0
340
Code Reliability
ryoaccount
0
14
S3は問答無用で非公開!!
ryoaccount
0
24
0から始めるセキュリティ
ryoaccount
0
120
エンジニアが考えるUI/UX
ryoaccount
0
17
Other Decks in Technology
See All in Technology
国内外の生成AIセキュリティの最新動向 & AIガードレール製品「chakoshi」のご紹介 / Latest Trends in Generative AI Security (Domestic & International) & Introduction to AI Guardrail Product "chakoshi"
nttcom
3
950
「SaaSの次の時代」に重要性を増すステークホルダーマネジメントの要諦 ~解像度を圧倒的に高めPdMの価値を最大化させる方法~
kakehashi
PRO
2
900
自分のハンドルは自分で握れ! ― 自分のケイパビリティを増やし、メンバーのケイパビリティ獲得を支援する ― / Take the wheel yourself
takaking22
1
910
ハーネスエンジニアリングをやりすぎた話 ~そのハーネスは解体された~
gotalab555
4
1.7k
Rebirth of Software Craftsmanship in the AI Era
lemiorhan
PRO
4
2k
研究開発部メンバーの働き⽅ / Sansan R&D Profile
sansan33
PRO
4
23k
All About Sansan – for New Global Engineers
sansan33
PRO
1
1.4k
「誰一人取り残されない」 AIエージェント時代のプロダクト設計思想 Product Management Summit 2026
mizushimac
0
140
明日からドヤれる!超マニアックなAWSセキュリティTips10連発 / 10 Ultra-Niche AWS Security Tips
yuj1osm
0
590
AWS認定資格は本当に意味があるのか?
nrinetcom
PRO
2
270
No Types Needed, Just Callable Method Check
dak2
1
1.2k
Do Ruby::Box dream of Modular Monolith?
joker1007
1
340
Featured
See All Featured
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
27
3.4k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
760
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
100
How GitHub (no longer) Works
holman
316
150k
Raft: Consensus for Rubyists
vanstee
141
7.4k
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.1k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
3.8k
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
260
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.5k
The Curious Case for Waylosing
cassininazir
0
300
Automating Front-end Workflow
addyosmani
1370
200k
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対策が必要 ◦ (セキュリティ対策に終わりはない ...)
ご清聴ありがとうございました