javascript / expert
Snippet
Enforcing DOM XSS Defense via Trusted Types Policy in React Extensions
This snippet demonstrates how to prevent DOM-based Cross-Site Scripting (XSS) in React applications when injecting dynamic markup. By creating a Browser Trusted Types policy, raw HTML strings are wrapped into immutable TrustedHTML objects prior to DOM assignment, blocking unauthorized script execution at the browser engine level.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import React, { useEffect, useRef } from 'react';const sanitizePolicy = window.trustedTypes?.createPolicy('reactHTMLPolicy', {createHTML: (input) => input.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, '')});export function TrustedHTMLRenderer({ rawHtml }) {const containerRef = useRef(null);useEffect(() => {if (containerRef.current) {const trusted = sanitizePolicy ? sanitizePolicy.createHTML(rawHtml) : rawHtml;containerRef.current.innerHTML = trusted;}}, [rawHtml]);return <div ref={containerRef} />;}
react
Breakdown
1
const sanitizePolicy = window.trustedTypes?.createPolicy('reactHTMLPolicy', {
Initializes a singleton Trusted Types policy using optional chaining to guard against unsupported browser engines.
2
createHTML: (input) => input.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, '')
Defines the sanitization contract that transforms untrusted input strings into browser-verified HTML primitives.
3
const trusted = sanitizePolicy ? sanitizePolicy.createHTML(rawHtml) : rawHtml;
Converts the raw markup string into a TrustedHTML instance if the policy API is supported by the runtime environment.
4
containerRef.current.innerHTML = trusted;
Safely assigns the sanitized content directly to the ref's DOM node while fulfilling Content Security Policy rules.