Cómo añadir cabeceras de seguridad en cualquier entorno
Cinco cabeceras cubren casi todo lo básico. Esto es lo que hace cada una y las líneas exactas para tu servidor.
El código y la configuración se mantienen en inglés.
El conjunto inicial
Strict-Transport-Security: usar siempre HTTPS en este sitio (lee la guía de HSTS antes de activarla).X-Content-Type-Options: nosniff: impide que los navegadores adivinen el tipo de archivo.X-Frame-Options: SAMEORIGIN: impide que otros sitios enmarquen el tuyo (clickjacking).Referrer-Policy: strict-origin-when-cross-origin: envía menos de tus URL a otros sitios.Permissions-Policy: desactiva las funciones del navegador que no usas.
nginx
Añade esto dentro de tu bloque server { }, luego ejecuta nginx -t y recarga.
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), microphone=(), geolocation=()" always;Ojo: si un bloque location tiene su propio add_header, nginx descarta las del nivel server para esa location. Repite ahí las cabeceras o ponlas en un archivo include compartido.
Apache (.htaccess)
Necesita mod_headers (activado en la mayoría de los hostings).
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
Header always set X-Content-Type-Options "nosniff"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "camera=(), microphone=(), geolocation=()"
</IfModule>Cloudflare
- Activa HSTS en SSL/TLS → Edge Certificates → HTTP Strict Transport Security.
- Para las demás cabeceras, crea una Response Header Transform Rule (Rules → Transform Rules → Modify Response Header) que establezca cada cabecera como valor estático para todas las peticiones entrantes.
WordPress sin acceso al servidor
Crea wp-content/mu-plugins/security-headers.php. Los plugins must-use se cargan automáticamente.
<?php
// Security headers for pages WordPress serves.
add_action( 'send_headers', function () {
header( 'X-Content-Type-Options: nosniff' );
header( 'X-Frame-Options: SAMEORIGIN' );
header( 'Referrer-Policy: strict-origin-when-cross-origin' );
header( 'Permissions-Policy: camera=(), microphone=(), geolocation=()' );
} );Esto solo cubre las páginas generadas por PHP. Los archivos estáticos y algunas cachés de página se lo saltan, así que las cabeceras del servidor o de la CDN son mejores cuando puedes usarlas.
Siguiente paso: Content-Security-Policy
CSP es la cabecera más potente y la que más probabilidades tiene de romper algo. Sigue la guía de CSP y empieza en modo de solo informe.