Las cabeceras de seguridad HTTP son respuestas que tu servidor envía al navegador antes de cargar cualquier página, indicándole qué contenido puede ejecutar, si puede mostrarse en un iframe, qué información revelar al hacer clic en un enlace externo, y más. Configurarlas correctamente cierra vulnerabilidades de forma inmediata, sin tocar una sola línea del código de tu aplicación.
En este artículo verás cuáles son las cabeceras más importantes, qué protegen exactamente, y cómo añadirlas en Apache y Nginx.
Por qué importan las cabeceras de seguridad HTTP
Un sitio puede tener su código perfectamente auditado y aun así ser vulnerable si el navegador no recibe instrucciones claras sobre qué está permitido. Los ataques de Cross-Site Scripting (XSS), el clickjacking y el robo de información a través de cabeceras Referer se aprovechan exactamente de ese vacío.
Añadir las cabeceras correctas es una de las medidas con mejor relación esfuerzo/resultado en seguridad web: unos pocos minutos de configuración eliminan categorías enteras de ataques. Herramientas como securityheaders.com puntúan tu sitio de la A a la F y te muestran qué falta.
Las 6 cabeceras esenciales que debes configurar
1. Content-Security-Policy (CSP)
Es la cabecera más poderosa y también la más compleja. Le indica al navegador de qué dominios puede cargar scripts, estilos, imágenes y fuentes. Una política estricta bloquea la ejecución de scripts inyectados por atacantes (XSS).
Ejemplo de política conservadora:
Content-Security-Policy: default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;
Nota: empieza en modo Content-Security-Policy-Report-Only para detectar bloqueos antes de aplicarla en producción.
2. Strict-Transport-Security (HSTS)
Obliga al navegador a conectarse siempre por HTTPS durante el tiempo que definas. Elimina el riesgo de ataques SSL stripping. Se profundiza en este tema en el artículo sobre certificados SSL y seguridad web.
Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
3. X-Frame-Options
Evita que tu sitio sea incrustado en un <iframe> de otro dominio, previniendo el clickjacking: ataques donde el usuario cree que hace clic en tu interfaz pero en realidad interactúa con un botón o enlace malicioso superpuesto.
X-Frame-Options: SAMEORIGIN
4. X-Content-Type-Options
Evita que el navegador intente "adivinar" el tipo MIME de un archivo cuando el servidor ya lo ha declarado. Sin esta cabecera, un atacante podría subir un archivo de texto con código JavaScript y lograr que el navegador lo ejecute.
X-Content-Type-Options: nosniff
5. Referrer-Policy
Controla qué información de la URL actual se envía al destino cuando el usuario hace clic en un enlace externo. Sin esta cabecera, el sitio de destino puede ver la URL completa de tu página, incluyendo rutas privadas o parámetros con datos sensibles.
Referrer-Policy: strict-origin-when-cross-origin
6. Permissions-Policy
Antes llamada Feature-Policy. Restringe qué APIs del navegador puede usar tu sitio y los iframes que contenga: cámara, micrófono, geolocalización, etc. Útil para limitar el daño si un script de terceros queda comprometido.
Permissions-Policy: geolocation=(), microphone=(), camera=()
Cómo añadir las cabeceras en Apache
En Apache necesitas el módulo mod_headers activo. Añade las directivas en tu archivo .htaccess o en el bloque <VirtualHost>:
<IfModule mod_headers.c>
Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
Header always set X-Frame-Options "SAMEORIGIN"
Header always set X-Content-Type-Options "nosniff"
Header always set Referrer-Policy "strict-origin-when-cross-origin"
Header always set Permissions-Policy "geolocation=(), microphone=(), camera=()"
Header always set Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;"
</IfModule>
Después de guardar el archivo, recarga Apache con el comando correspondiente en tu panel de hosting o VPS.
Cómo añadir las cabeceras en Nginx
En Nginx, añade las líneas dentro del bloque server o location en tu archivo de configuración del sitio:
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "geolocation=(), microphone=(), camera=()" always;
add_header Content-Security-Policy "default-src 'self'; script-src 'self'; style-src 'self' 'unsafe-inline'; img-src 'self' data:;" always;
Recarga Nginx con nginx -s reload y verifica con curl -I https://tudominio.com que las cabeceras aparecen en la respuesta.
Tabla comparativa de cabeceras
| Cabecera | Protege contra | Impacto en compatibilidad |
|---|---|---|
| Content-Security-Policy | XSS, inyección de recursos | Alto — requiere pruebas |
| HSTS | SSL stripping, downgrade | Bajo — solo HTTPS |
| X-Frame-Options | Clickjacking | Muy bajo |
| X-Content-Type-Options | MIME sniffing | Muy bajo |
| Referrer-Policy | Filtración de URL | Muy bajo |
| Permissions-Policy | Abuso de APIs del navegador | Bajo |
Conclusiones clave
- Las cabeceras de seguridad HTTP se configuran en el servidor y se aplican automáticamente a todas las páginas del sitio.
- Content-Security-Policy es la más poderosa: bloquea XSS pero requiere pruebas previas con el modo Report-Only.
- HSTS, X-Frame-Options y X-Content-Type-Options tienen impacto mínimo en compatibilidad y deben activarse de inmediato.
- La sintaxis es la misma en Apache y Nginx; cambia la directiva de contenedor (
Header always setvsadd_header). - Valida el resultado en securityheaders.com para confirmar que la configuración quedó correcta.
¿Prefieres que un equipo técnico configure y audite las cabeceras de seguridad de tu sitio? En elenlace.com ofrecemos revisiones de seguridad web y mantenimiento continuo para que tu presencia en línea esté siempre protegida.
Preguntas frecuentes
¿Puedo configurar cabeceras de seguridad desde cPanel o Plesk?
Sí. En cPanel puedes editar el archivo .htaccess desde el administrador de archivos o desde la sección "Modificar cabeceras HTTP". En Plesk existe una sección equivalente en la configuración de cada dominio. La sintaxis de Apache aplica en ambos casos.
¿Las cabeceras de seguridad afectan el rendimiento del sitio?
No de forma perceptible. Son unas pocas líneas de texto que el servidor añade a cada respuesta HTTP. El impacto en latencia o ancho de banda es insignificante comparado con el beneficio de seguridad que aportan.
¿Qué pasa si Content-Security-Policy bloquea recursos legítimos de mi sitio?
El sitio puede dejar de cargar estilos, scripts o fuentes externas. Por eso se recomienda empezar con Content-Security-Policy-Report-Only: registra los bloqueos en consola sin aplicarlos, lo que te permite afinar la política antes de activarla en modo estricto.
¿Con qué frecuencia debo revisar mis cabeceras de seguridad?
Al menos cada 6 meses, o cada vez que añadas un servicio externo (Analytics, chat, mapas) que cargue scripts o estilos de otro dominio. Esos recursos deben quedar incluidos en tu política CSP para que el sitio siga funcionando correctamente.
¿Prefieres que lo hagamos por ti? En El Enlace resolvemos hosting y desarrollo web profesional.
Compara proveedores
Otros proveedores y guías que vale la pena comparar: