javascript / intermediate
Snippet
Sicheres HTML-Rendering in React durch DOMPurify-Bereinigung
Das direkte Einfügen von ungefiltertem Benutzer-HTML über `dangerouslySetInnerHTML` setzt React-Anwendungen Cross-Site-Scripting-Angriffen (XSS) aus. Durch das Bereinigen ungesicherter Strings mittels DOMPurify und einer expliziten Whitelist erlaubter Tags und Attribute wird bösartiger JavaScript-Code vor der DOM-Übergabe neutralisiert.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import DOMPurify from 'dompurify';const SANITIZE_CONFIG = {ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p', 'code'],ALLOWED_ATTR: ['href', 'target', 'rel']};export function SafeRichText({ rawHtml, className }) {const cleanHtml = DOMPurify.sanitize(rawHtml, SANITIZE_CONFIG);return (<divclassName={className}dangerouslySetInnerHTML={{ __html: cleanHtml }}/>);}
react
Erklärung
1
ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p', 'code'],
Definiert eine Positivliste erlaubter HTML-Elemente für Formatierungen und entfernt Tags wie `<script>` oder `<iframe>`.
2
const cleanHtml = DOMPurify.sanitize(rawHtml, SANITIZE_CONFIG);
Parst und entfernt ausführbaren Code, unzulässige Tags und Event-Handler wie `onload` oder `onerror`.
3
dangerouslySetInnerHTML={{ __html: cleanHtml }}
Weist React an, den bereinigten HTML-String direkt in das umgebende Container-Element zu rendern.