$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
React and XSS
Search
Yunosuke Yamada
October 16, 2022
Programming
0
350
React and XSS
Yunosuke Yamada
October 16, 2022
Tweet
Share
More Decks by Yunosuke Yamada
See All by Yunosuke Yamada
Gemini CLIでもセキュアで堅牢な開発をしたい!
yunosukey
1
320
DevOps/MLOpsに学ぶエージェントの可観測性
yunosukey
1
860
Agent Development Kitで作るマルチエージェントアプリケーション(AIAgent勉強会)
yunosukey
4
1.4k
Agent Development Kitで作るマルチエージェントアプリケーション(GCNT2025)
yunosukey
0
42
AIエージェントのオブザーバビリティについて
yunosukey
1
800
OpenTelemetry + LLM = OpenLLMetry!?
yunosukey
2
820
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
370
フロントエンドオブザーバビリティ on Google Cloud
yunosukey
1
310
ChatGPTのアルゴリズム
yunosukey
0
400
Other Decks in Programming
See All in Programming
Giselleで作るAI QAアシスタント 〜 Pull Requestレビューに継続的QAを
codenote
0
220
AIコーディングエージェント(Manus)
kondai24
0
190
FluorTracer / RayTracingCamp11
kugimasa
0
230
chocoZAPサービス予約システムをNuxtで内製化した話
rizap_tech
0
160
UIデザインに役立つ 2025年の最新CSS / The Latest CSS for UI Design 2025
clockmaker
18
7.5k
JETLS.jl ─ A New Language Server for Julia
abap34
1
410
C-Shared Buildで突破するAI Agent バックテストの壁
po3rin
0
390
AIの誤りが許されない業務システムにおいて“信頼されるAI” を目指す / building-trusted-ai-systems
yuya4
6
3.7k
MAP, Jigsaw, Code Golf 振り返り会 by 関東Kaggler会|Jigsaw 15th Solution
hasibirok0
0
250
LLM Çağında Backend Olmak: 10 Milyon Prompt'u Milisaniyede Sorgulamak
selcukusta
0
120
Context is King? 〜Verifiability時代とコンテキスト設計 / Beyond "Context is King"
rkaga
10
1.3k
ゲームの物理 剛体編
fadis
0
350
Featured
See All Featured
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
55
3.1k
Making Projects Easy
brettharned
120
6.5k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
196
70k
Designing for humans not robots
tammielis
254
26k
Writing Fast Ruby
sferik
630
62k
Agile that works and the tools we love
rasmusluckow
331
21k
Unsuck your backbone
ammeep
671
58k
Facilitating Awesome Meetings
lara
57
6.7k
Sharpening the Axe: The Primacy of Toolmaking
bcantrill
46
2.6k
Bash Introduction
62gerente
615
210k
Building Flexible Design Systems
yeseniaperezcruz
330
39k
Leading Effective Engineering Teams in the AI Era
addyosmani
9
1.3k
Transcript
ReactとXSS 2021/07/15 山田悠之介
XSS (Cross-site scripting) 悪意のあるスクリプトを閲覧者のブラウザで実行すること 反射型 XSS、格納型 XSS、DOM Based XSS などの種類があるが
いずれも XSS するためには文字列として入力したスクリプトを 標的となるサイトで実行させなければならない 2
React React では XSS 対策として文字列はエスケープされる。 https://ja.reactjs.org/docs/jsx-in-depth.html#string-literals 3
生成される HTML export default function Home() { const script =
` <script> while (1) { alert('!'); } </script>`; return <main>{script}</main>; } ↓ <main><script> while (1) { alert('!'); } </script></main> 4
innerHTML 標準の JS や jQuery で HTML を動的に生成するときには innerHTML を使っていた。
React では... 5
dangerouslySetInnerHTML https://ja.reactjs.org/docs/dom- elements.html#dangerouslysetinnerhtml export default function Home() { const script
= ... const html = { __html: script }; return ( <main> <div dangerouslySetInnerHTML={html} />; </main> ); } 6
href, src export default function Home() { const script =
` javascript: while (1) { alert('!'); }`; return ( <main> <a href={script}>link</a> </main> ); } 7
"javascript:"は deprecated https://reactjs.org/blog/2019/08/08/react- v16.9.0.html#deprecating-javascript-urls 将来的にはエラーにする 8
その他 DOM 要素の取得 (findDOMNode, createRef) からの innerHTML createElement SSR +
Redux eval(React 関係ないけど) 9
回避するには ユーザの入力を無害化する DOMPurify 10
import DOMPurify from "isomorphic-dompurify"; export default function Home() { const
script = "<script>...</script>Hello"; const html = { __html: DOMPurify.sanitize(script) }; return ( <main> <div dangerouslySetInnerHTML={html} /> </main> ); } ↓ <main><div>Hello</div></main> 11
参考資料 https://zenn.dev/yuuhu04/books/xss-anti-pattern-of-react- and-vue 最初に読んだ https://pragmaticwebsecurity.com/articles/spasecurity/react -xss-part1.html part3 まである 網羅的 12
Thank you 13