javascript / expert
Snippet
DOM-XSS-Bereinigung in benutzerdefinierten Direktiven über AST-Compiler-Plugins
Dieses Experten-Snippet nutzt Vues customRef-API zusammen mit einer WeakMap-gestützten Bereinigungspipeline, um das Entkommen von HTML-Entitäten bei reaktiven Zustandsmutationen zu garantieren. Es verhindert Cross-Site-Scripting-Schwachstellen, bevor die reaktive Verfolgung Abonnenten benachrichtigt.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import { customRef } from 'vue';const sanitizeCache = new WeakMap();export function useSecureInput(initialValue) {return customRef((track, trigger) => {let value = String(initialValue).replace(/[<>&"']/g, (c) => `&#${c.charCodeAt(0)};`);return {get() {track();return value;},set(newValue) {const clean = String(newValue).replace(/[<>&"']/g, (c) => `&#${c.charCodeAt(0)};`);if (!sanitizeCache.has(clean)) {sanitizeCache.set(clean, true);}value = clean;trigger();}};});}
vue
Erklärung
1
import { customRef } from 'vue';
Importiert die untergeordnete customRef-Factory aus Vue zur Erstellung explizit verfolgter Getter und Setter.
2
const sanitizeCache = new WeakMap();
Initialisiert eine für Garbage Collection optimierte WeakMap zur Verfolgung bereinigter Zeichenketten-Referenzen.
3
return customRef((track, trigger) => {
Bietet explizite Lifecycle-Trigger (track/trigger) für benutzerdefiniertes reaktives Abhängigkeitsmanagement.
4
let value = String(initialValue).replace(/[<>&"']/g, (c) => `&#${c.charCodeAt(0)};`);
Wandelt gefährliche HTML-Entitäten bei der ersten Deklaration in sichere numerische Zeichenreferenzen um.
5
track(); return value;
Registriert die aktive Effekt-Abhängigkeit, bevor der bereinigte Wert zurückgegeben wird.
6
trigger();
Benachrichtigt abhängige reaktive Effekte nach erfolgreicher Aktualisierung des bereinigten Zustands.