0 Tage Serie
javascript / intermediate
Snippet

Bereinigung von Rich-HTML-Inhalten vor dem Einfügen mit dangerouslySetInnerHTML

Die unbereinigte Übergabe von benutzergeneriertem Markup an `dangerouslySetInnerHTML` setzt React-Anwendungen Cross-Site-Scripting-Angriffen (XSS) aus. Durch das Bereinigen des Strings mit DOMPurify innerhalb eines `useMemo`-Hooks werden schädliche ausführbare Tags (`<script>`, `<iframe>`) und gefährliche Event-Handler-Attribute (`onload`, `onerror`) entfernt, bevor das sichere HTML in das DOM eingefügt wird.

snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import DOMPurify from 'dompurify';
function ArticleViewer({ rawHtmlContent }) {
const cleanHtml = React.useMemo(() => {
if (typeof rawHtmlContent !== 'string') return '';
return DOMPurify.sanitize(rawHtmlContent, {
USE_PROFILES: { html: true },
FORBID_TAGS: ['script', 'iframe', 'object'],
});
}, [rawHtmlContent]);
return (
<article
className="article-body"
dangerouslySetInnerHTML={{ __html: cleanHtml }}
/>
);
}
react
Erklärung
1
return DOMPurify.sanitize(rawHtmlContent, {
Analysiert und bereinigt den rohen HTML-String anhand strenger Sicherheitsregeln von schädlichen Elementen.
2
FORBID_TAGS: ['script', 'iframe', 'object'],
Verbietet explizit gefährliche Tags, die unerlaubte Skripte ausführen oder fremde Kontexte einbinden könnten.
3
dangerouslySetInnerHTML={{ __html: cleanHtml }}
Fügt das validierte, bereinigte HTML-Markup direkt als Kind-Elemente des Article-Knotens ein.