javascript / expert
Snippet
Erzwingen von DOM-XSS-Schutz mittels Trusted Types Policy in React-Erweiterungen
Dieses Beispiel zeigt, wie man DOM-basiertes Cross-Site Scripting (XSS) in React-Anwendungen beim Einfügen dynamischer Auszeichnungen verhindert. Durch das Erstellen einer Trusted Types Policy des Browsers werden rohe HTML-Strings vor der DOM-Zuweisung in unveränderliche TrustedHTML-Objekte verpackt, was die Ausführung nicht autorisierter Skripte auf Browser-Ebene blockiert.
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
Erklärung
1
const sanitizePolicy = window.trustedTypes?.createPolicy('reactHTMLPolicy', {
Initialisiert eine Singleton Trusted Types Policy mit Optional Chaining zum Schutz vor nicht unterstützten Browser-Engines.
2
createHTML: (input) => input.replace(/<script[^>]*>([\s\S]*?)<\/script>/gi, '')
Definiert den Bereinigungsvertrag, der nicht vertrauenswürdige Eingabestrings in vom Browser verifizierte HTML-Primitiven umwandelt.
3
const trusted = sanitizePolicy ? sanitizePolicy.createHTML(rawHtml) : rawHtml;
Konvertiert den rohen Markup-String in eine TrustedHTML-Instanz, sofern die Policy-API von der Laufzeitumgebung unterstützt wird.
4
containerRef.current.innerHTML = trusted;
Weist den bereinigten Inhalt unter Einhaltung der Content Security Policy-Regeln sicher direkt dem DOM-Knoten des Refs zu.