Falta el Header Content-Security-Policy
El header Content-Security-Policy (CSP) está ausente, dejando a los navegadores sin instrucciones sobre qué fuentes de scripts, estilos y recursos confiar.
Cómo Funciona
Sin CSP, si un atacante inyecta un script malicioso en tu página (via XSS), el navegador lo ejecutará sin cuestionar. CSP es una allowlist que el navegador enforce y bloquea scripts de orígenes inesperados, ejecución de scripts inline y trucos con data: URI — es tu última línea de defensa cuando ocurre XSS.
// MAL: sin header CSP en la config de Next.js
// next.config.ts — sin headers() definidos
export default {
// CSP no configurado
};// BIEN: CSP estricto en headers de Next.js
// next.config.ts
const cspHeader = `
default-src 'self';
script-src 'self' 'nonce-{NONCE}';
style-src 'self' 'unsafe-inline';
img-src 'self' data: https:;
connect-src 'self';
frame-ancestors 'none';
`;
export default {
async headers() {
return [{ source: '/(.*)', headers: [{ key: 'Content-Security-Policy', value: cspHeader }] }];
}
};Ejemplo Real
British Airways (2018) — los atacantes inyectaron 22 líneas de JavaScript en la página de pago. Un CSP estricto habría bloqueado la carga del script malicioso. El breach comprometió 500,000 clientes y resultó en una multa de £20 millones.
Cómo Prevenirlo
- Agrega el header Content-Security-Policy a todas las respuestas via headers() de Next.js o config de nginx
- Empieza en modo report-only (Content-Security-Policy-Report-Only) para probar sin romper nada
- Usa nonces para scripts inline en lugar de 'unsafe-inline'
- Prueba tu CSP en csp-evaluator.withgoogle.com
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Falta el Header X-Frame-Options
mediumEl header X-Frame-Options está ausente, permitiendo a atacantes embeber tu app en un iframe invisible y engañar usuarios para que hagan clic en tus elementos de UI (clickjacking).
Falta el Header X-Content-Type-Options
lowEl header X-Content-Type-Options: nosniff está ausente, permitiendo que los navegadores adivinen el tipo de contenido de una respuesta y potencialmente ejecuten contenido como script.
Falta HTTP Strict Transport Security (HSTS)
mediumEl header Strict-Transport-Security está ausente, permitiendo a los navegadores conectarse por HTTP plano y habilitando ataques de downgrade donde un atacante intercepta tráfico no cifrado.
Cookies Sin Flag Secure
mediumCookies de sesión configuradas sin el flag Secure, permitiendo que se transmitan por conexiones HTTP no cifradas y sean interceptadas por atacantes en la red.