Kontextuelles Escaping über Tagged Templates
Tagged Template Literals ermöglichen das Parsen von Template-Strings durch eine Funktion. Dies ist ein Experten-Pattern zur Implementierung von Domain Specific Languages (DSLs) oder, wie hier gezeigt, für automatisches Security-Escaping zur Vermeidung von XSS-Angriffen.
function safeHTML(strings, ...values) {return strings.reduce((acc, str, i) => {const value = String(values[i] || '');const escaped = value.replace(/[&<>"']/g, m => ({'&': '&', '<': '<', '>': '>', '"': '"', "'": '''}[m]));return acc + str + escaped;}, '');}const userSupplied = '<img src=x onerror=alert(1)>';const html = safeHTML`<div>${userSupplied}</div>`;