typescript / intermediate
Snippet
Typsichere Eingabebereinigung durch Branded Types
Branded Types (Markierte Typen) erstellen nominale Typunterscheidungen über primitiven Typen wie Strings. Dies zwingt Entwickler dazu, Benutzereingaben durch eine Bereinigungsfunktion zu leiten, bevor sie in sicherheitskritischen Funktionen verwendet werden können.
snippet.ts
typescript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
type SanitizedString = string & { readonly __brand: unique symbol };function sanitizeInput(raw: string): SanitizedString {const sanitized = raw.replace(/<[^>]*>/g, "").trim();return sanitized as SanitizedString;}function renderContent(safeContent: SanitizedString): string {return `<article>${safeContent}</article>`;}const userInput = "<script>alert('xss')</script> Hello World ";const safeText = sanitizeInput(userInput);const htmlOutput = renderContent(safeText);
Erklärung
1
type SanitizedString = string & { readonly __brand: unique symbol };
Definiert einen Branded Type, der zur Laufzeit ein String ist, vom Compiler aber als eigenständig behandelt wird.
2
return sanitized as SanitizedString;
Verwendet eine Typzusicherung in der Validierungsfunktion, um den bereinigten String als sicher zu markieren.
3
function renderContent(safeContent: SanitizedString): string {
Beschränkt den Parameter auf Strings, die die Validierung explizit bestanden haben.
4
const htmlOutput = renderContent(safeText);
Führt renderContent erfolgreich aus, da safeText ordnungsgemäß validiert und markiert wurde.