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
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
ryoAccount
July 20, 2025
Technology
53
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
210
Code Reliability
ryoaccount
0
5
S3は問答無用で非公開!!
ryoaccount
0
9
0から始めるセキュリティ
ryoaccount
0
110
エンジニアが考えるUI/UX
ryoaccount
0
6
Other Decks in Technology
See All in Technology
FastMCP OAuth Proxy with Cognito
hironobuiga
3
230
CREがSLOを握ると 何が変わるのか
nekomaho
0
320
やさしいとこから始めるGitHubリポジトリのセキュリティ
tsubakimoto_s
3
2.1k
MCPで決済に楽にする
mu7889yoon
0
160
AgentCoreとLINEを使った飲食店おすすめアプリを作ってみた
yakumo
2
270
SaaSの操作主体は人間からAIへ - 経理AIエージェントが目指す深い自動化
nishihira
0
130
AIエージェント勉強会第3回 エージェンティックAIの時代がやってきた
ymiya55
0
180
来期の評価で変えようと思っていること 〜AI時代に変わること・変わらないこと〜
estie
0
130
The essence of decision-making lies in primary data
kaminashi
0
190
Bill One 開発エンジニア 紹介資料
sansan33
PRO
5
18k
VSCode中心だった自分がターミナル沼に入門した話
sanogemaru
0
870
Datadog で実現するセキュリティ対策 ~オブザーバビリティとセキュリティを 一緒にやると何がいいのか~
a2ush
0
180
Featured
See All Featured
Become a Pro
speakerdeck
PRO
31
5.9k
What's in a price? How to price your products and services
michaelherold
247
13k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
Typedesign – Prime Four
hannesfritz
42
3k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.1k
Why Our Code Smells
bkeepers
PRO
340
58k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
800
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
38
2.8k
Design in an AI World
tapps
0
190
Building AI with AI
inesmontani
PRO
1
840
The #1 spot is gone: here's how to win anyway
tamaranovitovic
2
1k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
54k
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対策が必要 ◦ (セキュリティ対策に終わりはない ...)
ご清聴ありがとうございました