Datos Sensibles en Query Strings de URL
Tokens, contraseñas o identificadores sensibles pasados como parámetros de query en URL, donde son visibles en el historial del navegador, logs del servidor, headers Referer y links compartidos.
Cómo Funciona
Las URLs aparecen en el historial del navegador, logs de acceso del servidor, logs de CDN, herramientas de analítica y el header HTTP Referer (enviado a cada recurso embebido). Un token de reset de contraseña en una URL como `/reset?token=abc123` queda registrado en tu servidor web, visible para los SDKs de analítica y enviado a scripts de terceros via Referer.
// MAL: token en query string de URL
const resetUrl = `https://tuapp.com/reset-password?token=${resetToken}&email=${email}`;
// Este token aparece en:
// - Historial del navegador, logs del servidor, logs de CDN
// - Header HTTP Referer enviado a cualquier script embebido// BIEN: token en el path de URL (no en query), uso único
// Los params de path también se loguean, pero al menos no en Referer
const resetUrl = `https://tuapp.com/reset-password/${resetToken}`;
// Aún mejor: envía el token via POST, no GET
// O: valida y redirige inmediatamente a un flujo basado en sesiónEjemplo Real
Los tokens de reset de contraseña en URLs han sido logueados por nginx, CloudFlare, Google Analytics, Segment y otras herramientas. Cuando estos logs se exponen o comparten, los tokens quedan comprometidos. GitHub deprecó los tokens OAuth basados en URL por exactamente este problema.
Cómo Prevenirlo
- Nunca pongas tokens de sesión, contraseñas o IDs sensibles en parámetros de query de URL
- Usa requests POST para enviar datos sensibles, no GET
- Para reset de contraseña, usa tokens de corta vida e invalídalos inmediatamente después de usarse
- Asegúrate de tener Referrer-Policy: no-referrer o strict-origin para limitar la fuga de tokens via Referer
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
XSS Basado en DOM
highScripts maliciosos ejecutados al leer datos controlados por el atacante de la URL o APIs del navegador y escribirlos en el DOM usando sinks peligrosos como innerHTML o document.write.
XSS Almacenado
highContenido provisto por el usuario guardado en la base de datos sin sanitizar y renderizado en el navegador como HTML, permitiendo inyección de scripts persistente que se ejecuta para cada usuario que ve el contenido.
PostMessage Sin Verificar Origen
mediumHandlers de window.addEventListener('message') que procesan mensajes sin verificar event.origin, permitiendo que cualquier sitio web envíe comandos al handler de mensajes de tu app.
Clickjacking Avanzado
mediumAusencia de los headers X-Frame-Options y CSP frame-ancestors, combinada con sin lógica de frame-busting en el cliente, dejando la app completamente embebible en iframes maliciosos.