javascript / intermediate
Snippet
Erstellen einer benutzerdefinierten Bereinigungsdirektive mit DOMPurify zur XSS-Prävention
Die direkte Verwendung von Standard-v-html in Vue setzt Anwendungen Cross-Site-Scripting-Angriffen (XSS) aus, wenn Daten unbereinigtes Benutzer-Markup enthalten. Eine benutzerdefinierte Direktive kapselt die Bereinigungslogik mithilfe von DOMPurify mit strikten Whitelists für Tags und Attribute und stellt sicher, dass dynamisches HTML beim Mounten oder Aktualisieren automatisch bereinigt wird.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import DOMPurify from 'dompurify';const SANITIZE_CONFIG = {ALLOWED_TAGS: ['b', 'i', 'em', 'strong', 'a', 'p', 'ul', 'li'],ALLOWED_ATTR: ['href', 'target', 'rel']};export const vSanitizeHtml = {mounted(el, binding) {const clean = DOMPurify.sanitize(binding.value ?? '', SANITIZE_CONFIG);el.innerHTML = clean;},updated(el, binding) {if (binding.value !== binding.oldValue) {const clean = DOMPurify.sanitize(binding.value ?? '', SANITIZE_CONFIG);el.innerHTML = clean;}}};
vue
Erklärung
1
const SANITIZE_CONFIG = { ALLOWED_TAGS: [...], ALLOWED_ATTR: [...] };
Definiert strikte Whitelists für erlaubte HTML-Elemente und -Attribute, um Skript-Vektoren zu eliminieren.
2
const clean = DOMPurify.sanitize(binding.value ?? '', SANITIZE_CONFIG);
Entfernt bösartige Tags, Event-Listener und JavaScript-URLs aus dem übergebenen String.
3
if (binding.value !== binding.oldValue) {
Verhindert redundante DOM-Aktualisierungen und Bereinigungsläufe, wenn sich Werte nicht geändert haben.