javascript / expert
Snippet
Bereinigen von Reaktiven Unsicheren HTML-Strings mit DOMPurify und Trusted Types
Das Rendern dynamischer HTML-Inhalte über Roh-Direktiven setzt Anwendungen Cross-Site Scripting (XSS) aus. Diesen Experten-Snippet kombiniert Vue Computed Properties mit DOMPurify und Trusted Types des Browsers. Durch das Einbetten der Ausgabe in eine Trusted Types Sicherheitsrichtlinie erzwingen moderne Browser eine strikte Richtlinienkonformität am DOM-Injektionspunkt und entfernen bösartige Skripte dynamisch.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { ref, computed } from 'vue';import DOMPurify from 'dompurify';const rawUserInput = ref('<img src=x onerror=alert(1)> Hello');const sanitizedHtml = computed(() => {if (typeof window !== 'undefined' && window.trustedTypes) {const policy = window.trustedTypes.createPolicy('vueSanitizer', {createHTML: (string) => DOMPurify.sanitize(string, { RETURN_TRUSTED_TYPE: true })});return policy.createHTML(rawUserInput.value);}return DOMPurify.sanitize(rawUserInput.value);});
vue
Erklärung
1
const sanitizedHtml = computed(() => {
Definiert ein schreibgeschütztes reaktives Computed Signal, das sich nur bei Änderungen unsicherer Eingaben neu berechnet.
2
if (typeof window !== 'undefined' && window.trustedTypes) {
Schützt vor SSR-Umgebungen und prüft die native Browser-Unterstützung für die W3C Trusted Types API.
3
window.trustedTypes.createPolicy('vueSanitizer', {
Erstellt ein unveränderliches Richtlinienobjekt, das Rohstrings in typisierte TrustedHTML-Objekte umwandelt.
4
createHTML: (string) => DOMPurify.sanitize(string, { RETURN_TRUSTED_TYPE: true })
Leitet die Eingabe an DOMPurify mit aktiviertem RETURN_TRUSTED_TYPE-Flag für Standardkonformität weiter.
5
return policy.createHTML(rawUserInput.value);
Führt die Richtlinientransformation aus und gibt ein gekapseltes Token zurück, das für v-html geeignet ist.