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
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
Practical TypeProf: Lessons from Analyzing Optcarrot
mame
0
370
Good Enough Types: Heuristic Type Inference for Ruby
riseshia
1
240
ワールドカフェI /チューターを改良する / World Café I and Improving the Tutors
ks91
PRO
0
320
目的ファーストのハーネス設計 ~ハーネスの変更容易性を高めるための優先順位~
gotalab555
8
2.2k
AIはハッカーを減らすのか、増やすのか?──現役ホワイトハッカーから見るAI時代のリアル【MEGU-Meet】
cscengineer
0
170
こんなアーキテクチャ図はいやだ / Anti-pattern in AWS Architecture Diagrams
naospon
1
450
はじめての MagicPod生成AI機能 機能紹介から活用方法まで
magicpod
0
100
20260423_執筆の工夫と裏側 技術書の企画から刊行まで / From the planning to the publication of technical book
nash_efp
3
410
EBS暗号化に失敗してEC2が動かなくなった話
hamaguchimmm
2
200
[最強DB講義]推薦システム | 基礎編
recsyslab
PRO
1
170
AI時代のガードレールとしてのAPIガバナンス
nagix
0
290
ハーネスエンジニアリングの概要と設計思想
sergicalsix
9
5k
Featured
See All Featured
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.9k
Connecting the Dots Between Site Speed, User Experience & Your Business [WebExpo 2025]
tammyeverts
11
890
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
55k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Building Adaptive Systems
keathley
44
3k
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
200
Building a A Zero-Code AI SEO Workflow
portentint
PRO
0
450
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
340
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
110
Embracing the Ebb and Flow
colly
88
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対策が必要 ◦ (セキュリティ対策に終わりはない ...)
ご清聴ありがとうございました