javascript / expert
Snippet
XSS-Minderung in benutzerdefinierten Vue-Direktiven durch Element-Bereinigung
Dort wird gezeigt, wie eine sicherheitsorientierte benutzerdefinierte Vue-Direktive geschrieben wird, die rohe HTML-Eingaben vor dem Rendern abfängt. Durch das Parsen von Strings in einer isolierten DOMParser-Instanz und das Entfernen ausführbarer Skript-Tags oder Frame-Elemente werden Cross-Site-Scripting-Angriffe (XSS) bei dynamischer Template-Injektion verhindert.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import { Directive } from 'vue';export const vSanitizeHtml: Directive<HTMLElement, string> = {mounted(el, binding) {try {const rawInput = binding.value;if (typeof rawInput !== 'string') {throw new TypeError('v-sanitize-html directive requires a string value.');}const parser = new DOMParser();const doc = parser.parseFromString(rawInput, 'text/html');const scripts = doc.querySelectorAll('script, iframe, object');scripts.forEach((node) => node.remove());el.innerHTML = doc.body.innerHTML;} catch (err) {console.error('Directives sanitization failure:', err);el.textContent = '';}}};
vue
Erklärung
1
export const vSanitizeHtml: Directive<HTMLElement, string> = {
Deklariert eine typisierte benutzerdefinierte Direktive mit Vue-Direktiven-Lifecycle-Hooks.
2
mounted(el, binding) {
Führt Logik aus, sobald das gebundene Element in die Ziel-DOM-Hierarchie eingefügt wird.
3
if (typeof rawInput !== 'string') { throw new TypeError(...); }
Erzwingt eine strikte Laufzeittypprüfung für das übergebene Direktiven-Bindungsargument.
4
const doc = parser.parseFromString(rawInput, 'text/html');
Parst Roh-String-Inhalt in einen isolierten DOM-Dokument-Teilbaum zur sicheren Überprüfung.
5
scripts.forEach((node) => node.remove());
Durchläuft und entfernt ausführbare Skript- und Frame-Elemente vor der Injektion zur Neutralisierung von XSS-Schwachstellen.
6
el.innerHTML = doc.body.innerHTML;
Weist den bereinigten HTML-String-Inhalt sicher dem Host-Element zu.
7
el.textContent = '';
Weicht bei unerwarteten Laufzeitfehlern auf einen sicheren leeren Zustand aus.