javascript / expert
Snippet
Verhinderung von Skript-Kontext-Injektion bei der serverseitigen Zustands-Serialisierung
Beim Übergeben von serverseitig gerendertem Zustand an Client-Hydratisierungsskripte ist normales JSON.stringify anfällig für XSS, wenn Payloads Skript-Endsequenzen oder Unicode-Zeilentrennzeichen enthalten. Das Maskieren von HTML-Tokens garantiert sicheres Inline-Skript-Embedding.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
export function safeSerializeState(data) {try {const json = JSON.stringify(data);return json.replace(/</g, '\\u003c').replace(/>/g, '\\u003e').replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');} catch (err) {throw new Error(`Serialization failed due to cyclic or invalid payload: ${err.message}`);}}
svelte
Erklärung
1
export function safeSerializeState(data) {
Exportiert eine Hilfsfunktion zur Bereinigung serialisierter SSR-Zustandspayloads.
2
const json = JSON.stringify(data);
Konvertiert das Zustandsobjekt in eine standardmäßige JSON-String-Darstellung.
3
return json.replace(/</g, '\\u003c')
Ersetzt öffnende spitze Klammern durch Unicode-Escape-Sequenzen zur Verhinderung von Tag-Breakouts.
4
.replace(/\u2028/g, '\\u2028')
Maskiert Unicode-Zeilentrennzeichen, die das JS-String-Parsing in Skriptblöcken unterbrechen.
5
throw new Error(...)
Fängt Serialisierungsfehler wie zirkuläre Referenzen ab und verpackt sie sauber.