// Валидация returnTo/redirect-параметров против open redirect: // принимаем только относительные пути, начинающиеся с одиночного '/'. // '//evil.com' (protocol-relative), '/\evil.com' (backslash-trick, // браузеры трактуют '\' как '/') и управляющие символы отклоняются. export function sanitizeReturnTo(value: unknown): string | undefined { if (typeof value !== 'string' || value.length === 0) return undefined; if (!value.startsWith('/')) return undefined; if (value.length > 1 && (value[1] === '/' || value[1] === '\\')) return undefined; if (/[\r\n\0]/.test(value)) return undefined; return value; }