/** * Defense-in-depth: liefert einen URL-String nur zurück, wenn er ein * sicheres http(s)-Schema hat. Sonst undefined. * * Hintergrund: das Backend validiert beim Speichern (Pentest 46.1), * aber Alt-Daten in der DB können noch `javascript:alert(...)` o.ä. * enthalten. React eskapt URLs in `href` NICHT automatisch – ein Klick * auf einen `javascript:`-Link triggert die XSS im User-Browser. * * Diese Funktion wird überall dort eingesetzt, wo wir User-Input * als `` rendern oder per `window.open` öffnen. */ export function safeHttpUrl(value: string | null | undefined): string | undefined { if (!value) return undefined; const trimmed = value.trim(); if (trimmed === '') return undefined; try { const parsed = new URL(trimmed); if (parsed.protocol !== 'http:' && parsed.protocol !== 'https:') return undefined; return trimmed; } catch { return undefined; } }