javascript / intermediate
Snippet
Bereinigung dynamischer Rich-Text-Inhalte zur Verhinderung von Cross-Site-Scripting
Das Rendern von rohem Benutzer-Input über die v-html-Direktive in Vue setzt Anwendungen Cross-Site-Scripting-Angriffen (XSS) aus. Durch das Filtern von HTML-Zeichenketten mit DOMPurify innerhalb einer Computed Property werden bösartige Skript-Injektionen und Attribute entfernt, während sichere Formatierungen erhalten bleiben.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
import { ref, computed } from 'vue';import DOMPurify from 'dompurify';export function useSanitizedContent(rawHtmlInput) {const untrustedMarkup = ref(rawHtmlInput);const cleanHtml = computed(() => {return DOMPurify.sanitize(untrustedMarkup.value, {ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p'],ALLOWED_ATTR: ['href', 'target', 'rel']});});return { untrustedMarkup, cleanHtml };}
vue
Erklärung
1
const untrustedMarkup = ref(rawHtmlInput);
Initialisiert einen reaktiven Zustand für die potenziell unsichere, vom Benutzer bereitgestellte HTML-Zeichenkette.
2
const cleanHtml = computed(() => {
Definiert eine berechnete Eigenschaft, die den Inhalt automatisch neu bereinigt, sobald sich das Quell-Markup ändert.
3
return DOMPurify.sanitize(untrustedMarkup.value, {
Ruft die Bereinigungs-Engine mit einer expliziten Whitelist-Konfiguration für Elemente und Attribute auf.
4
ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p'],
Beschränkt zulässige HTML-Knoten auf sichere Text- und Link-Tags und neutralisiert ausführbare Tags wie script oder iframe.