Upgrade to Pro — share decks privately, control downloads, hide ads and more …

ReactのdangerouslySetInnerHTMLは“dangerously”だから危...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.

ReactのdangerouslySetInnerHTMLは“dangerously”だから危険 / Security.any #09 卒業したいセキュリティLT

Security.any #09 卒業したいセキュリティLT( https://security-any.connpass.com/event/382763/ )における、セキュリティエンジニア 石川の登壇資料です。

Avatar for GMO Flatt Security

GMO Flatt Security

March 19, 2026
Tweet

More Decks by GMO Flatt Security

Other Decks in Technology

Transcript

  1. 自己紹介 Ryusei Ishikawa id: xryuseix / twitter: @ryusei_ishika GMO Flatt

    Security(株) プロフェッショナルサービス部 脆弱性診断やセキュリティAIエージェントを提供する会社です Webの脆弱性診断やペネトレーションテストをしています 好きな脆弱性はXSS・RCE © 2025 GMO Flatt Security Inc. All Rights Reserved.
  2. ReactのdangerouslySetInnerHTMLって? 特定のDOM要素にHTMLを追加する属性 (Webにおける Element.innerHTML プロパティの React での代替) → このコードは... こうなる

    https://developer.mozilla.org/ja/docs/Web/API/Element/innerHTML https://ja.legacy.reactjs.org/docs/dom-elements.html#dangerouslysetinnerhtml © 2025 GMO Flatt Security Inc. All Rights Reserved.
  3. dangerouslySetInnerHTMLを使ったらどうなる? XSS 悪意あるJSを他ユーザの
 ブラウザ上で実行する攻撃 されること: アカウント乗っ取り 意図しない不正操作 勝手な投稿や決済など ページ情報の漏洩 ユーザ情報が書かれてい

    るページなど ... (ブラウザ上でできること がなんでもされる) CSSインジェクション
 (CSSi) 悪意あるCSSを他ユーザの
 ブラウザ上で表示する攻撃 されること: 画面の改ざん 操作の妨害 入力内容の漏洩 パスワードが
 抜き取られるかも © 2025 GMO Flatt Security Inc. All Rights Reserved.
  4. dangerouslySetInnerHTML以外に似た危険な機能って他に何がある? JavaScript Element.innerHTML = "hoge" jQuery $('div').html('<p>hoge</p>'); Python - Django

    {% autoescape off %} A. いっぱいある PHP - Twig {{ hoge|raw }} Vue.js <p v-html="hoge"></p> © 2025 GMO Flatt Security Inc. All Rights Reserved.
  5. じゃあどう対策すれば? 対策方法2: DOMPurifyを使う ⭕️ 安全な実装 DOMPurifyとは、HTML内のJavaScriptとして実行される部分だけを削除するOSS Cure53というドイツのセキュリティ企業が中心となって開発 Cure53 - GitHub

    - cure53/DOMPurify: DOMPurify - a DOM-only, super-fast, uber-tolerant XSS sanitizer for HTML, MathML and SVG. DOMPurify works with a secure default, but offers a lot of configurability and hooks. https://github.com/cure53/DOMPurify © 2025 GMO Flatt Security Inc. All Rights Reserved.
  6. じゃあどう対策すれば? 軽減策 (根本的な対策 ではなく、保険みたいなやつ) HttpOnly Cookie やること: 認証関連のCookieに HttpOnly 属性を付与す

    る でも: セッションキーは盗めないけど 、悪意のあ る操作をされ る Content-Security-Policy (CSP) やること: こんな感じのヘッダーを返す Content-Security-Policy: default-src 'none'; script-src 'nonce-{ランダムな値}'; style-src 'self'; img-src 'self'; でも: CSPの設定ミスでよく迂回される & サイトの表示が壊れる可能性有 ドメインの分離 やること: 管理者画面など は別のドメインでホストされ るよう にす る でも: 同一ドメイン内なら攻撃可能 & 認証認可が複雑に sandbox属性付きiframe やること: XSSあ るかもコンテンツを iframe に閉じ 込める、可能なら sandbox 属性を付与 でも: 複雑な条件で、刺さる時は刺さる © 2025 GMO Flatt Security Inc. All Rights Reserved.