javascript / expert
Snippet
Kontextuelle HTML-Bereinigung und CSP-Nonce-Verifizierung in React-Komponenten
Diese sicherheitsfokussierte React-Komponente setzt strenge Abwehrmaßnahmen gegen Cross-Site Scripting (XSS) um. Sie analysiert unvertrauenswürdiges HTML via `DOMParser` im isolierten Dokumentkontext, entfernt bösartige Tags sowie Event-Handler-Attribute und koppelt das Rendering an CSP-Nonce-Verifizierungen.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import { useMemo } from 'react';function sanitizeUntrustedHTML(rawHtml) {const parser = new DOMParser();const doc = parser.parseFromString(rawHtml, 'text/html');const scripts = doc.querySelectorAll('script, iframe, object, embed');scripts.forEach((node) => node.remove());const allElements = doc.body.querySelectorAll('*');allElements.forEach((el) => {Array.from(el.attributes).forEach((attr) => {if (attr.name.startsWith('on') || attr.value.trim().startsWith('javascript:')) {el.removeAttribute(attr.name);}});});return doc.body.innerHTML;}export function SecureSafeHTML({ untrustedContent, cspNonce }) {const cleanHTML = useMemo(() => {if (!cspNonce) return '';return sanitizeUntrustedHTML(untrustedContent);}, [untrustedContent, cspNonce]);return (<divdata-nonce={cspNonce}dangerouslySetInnerHTML={{ __html: cleanHTML }}/>);}
react
Erklärung
1
const parser = new DOMParser();
Instanziiert einen Browser-DOMParser zur Umwandlung von Strings in sichere Dokument-AST-Bäume im Speicher.
2
const scripts = doc.querySelectorAll('script, iframe, object, embed');
Sucht gefährliche ausführbare HTML-Elemente für die strukturelle Entfernung vor der Injektion.
3
if (attr.name.startsWith('on') || attr.value.trim().startsWith('javascript:'))
Erkennt Inline-Event-Handler (z.B. onerror) sowie Pseudoprotokoll-URIs zur gezielten Säuberung.
4
dangerouslySetInnerHTML={{ __html: cleanHTML }}
Fügt den bereinigten HTML-String erst nach erfolgreicher Validierung und CSP-Prüfung in das DOM ein.