Desarrollo Seguro Dificultad: basica
Cabeceras de seguridad HTTP
Las cabeceras y atributos de cookie que endurecen una app web con poco esfuerzo.
Las cabeceras de respuesta HTTP son una de las defensas de mayor retorno por esfuerzo: unas pocas líneas de configuración mitigan XSS, clickjacking y fugas de información.
1. Content-Security-Policy (CSP)
La defensa más potente contra XSS: declara de dónde puede cargar recursos la página.
Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; frame-ancestors 'none'
Empieza en modo reporte (Content-Security-Policy-Report-Only) para no romper nada, revisa los
informes y luego aplícala. Evita unsafe-inline y unsafe-eval.
2. Strict-Transport-Security (HSTS)
Fuerza HTTPS en el navegador y previene downgrade a HTTP:
Strict-Transport-Security: max-age=63072000; includeSubDomains; preload
3. Otras cabeceras clave
X-Content-Type-Options: nosniff # no adivinar el tipo MIME
X-Frame-Options: DENY # anti-clickjacking (o usa frame-ancestors en CSP)
Referrer-Policy: strict-origin-when-cross-origin
Permissions-Policy: camera=(), microphone=(), geolocation=()
4. Atributos de cookie seguros
Las cookies de sesión necesitan los tres atributos:
res.cookie('session', token, {
httpOnly: true, // inaccesible desde JS → mitiga robo por XSS
secure: true, // solo por HTTPS
sameSite: 'lax', // mitiga CSRF ('strict' si no necesitas navegación cruzada)
});
5. No reinventes: usa una librería
// Express
import helmet from 'helmet';
app.use(helmet());
Frameworks como Next.js, Astro o Django permiten configurar estas cabeceras de forma declarativa.
Checklist rápida
- CSP definida, sin
unsafe-inline/unsafe-eval, probada en modo reporte. - HSTS con
max-agealto eincludeSubDomains. -
nosniff, anti-clickjacking yReferrer-Policypresentes. - Cookies de sesión con
HttpOnly,SecureySameSite. - Cabeceras gestionadas con una librería (p. ej. Helmet) o config del framework.
- #headers
- #xss
- #owasp