Los headers de seguridad HTTP son instrucciones que tu servidor envía al navegador del visitante. Le dicen al navegador cómo manejar el contenido de tu sitio y qué restricciones aplicar. Sin ellos, tu WordPress queda expuesto a ataques como XSS, clickjacking y MIME sniffing.
El 82% de los sitios WordPress que escaneamos en Chile no tiene configurados los headers básicos de seguridad. La buena noticia: configurarlos toma menos de 10 minutos.
¿Por qué importan los headers de seguridad?
Imagina tu sitio como una casa. WordPress es la estructura, los plugins son las ventanas y puertas, y los headers de seguridad son las cerraduras y alarmas. Puedes tener la mejor estructura, pero sin cerraduras, cualquiera entra.
Los headers de seguridad:
– Previenen ataques XSS (Cross-Site Scripting)
– Bloquean clickjacking (tu sitio embebido en un iframe malicioso)
– Fuerzan HTTPS (evitan downgrades a HTTP)
– Controlan qué recursos puede cargar tu sitio (previenen inyección de scripts)
– Mejoran tu score de seguridad en auditorías
Los 7 headers esenciales
1. Strict-Transport-Security (HSTS)
Qué hace: Fuerza al navegador a usar siempre HTTPS. Una vez que el navegador recibe este header, nunca intentará conectarse por HTTP.
“`apache
Header set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”
“`
– `max-age=31536000`: Recordar por 1 año
– `includeSubDomains`: Aplicar a todos los subdominios
– `preload`: Permite incluirse en la lista de preload de navegadores
2. Content-Security-Policy (CSP)
Qué hace: Define qué recursos (scripts, estilos, imágenes, fuentes) puede cargar tu sitio. Es la defensa más potente contra XSS.
“`apache
Header set Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ https://www.googletagmanager.com; style-src ‘self’ ‘unsafe-inline’; img-src ‘self’ data: https:; font-src ‘self’; frame-src https://www.google.com”
“`
Importante: CSP puede romper funcionalidades si es muy restrictivo. Empieza con `Content-Security-Policy-Report-Only` para detectar problemas sin bloquear nada.
3. X-Frame-Options
Qué hace: Previene que tu sitio sea embebido en un iframe. Esto bloquea ataques de clickjacking donde un atacante pone tu sitio invisible sobre un botón malicioso.
“`apache
Header set X-Frame-Options “SAMEORIGIN”
“`
Opciones:
– `DENY`: Nunca permitir iframes
– `SAMEORIGIN`: Solo permitir iframes desde tu mismo dominio
4. X-Content-Type-Options
Qué hace: Previene MIME sniffing — cuando el navegador “adivina” el tipo de archivo en vez de confiar en el Content-Type del servidor. Un atacante podría subir un archivo .jpg que en realidad es un script.
“`apache
Header set X-Content-Type-Options “nosniff”
“`
5. Referrer-Policy
Qué hace: Controla cuánta información de la URL de origen se envía cuando un visitante navega desde tu sitio a otro.
“`apache
Header set Referrer-Policy “strict-origin-when-cross-origin”
“`
Esto envía el dominio (no la URL completa) cuando el visitante sale de tu sitio, protegiendo URLs con información sensible.
6. Permissions-Policy
Qué hace: Controla qué APIs del navegador puede usar tu sitio (cámara, micrófono, geolocalización, etc.).
“`apache
Header set Permissions-Policy “camera=(), microphone=(), geolocation=(), payment=(self)”
“`
Para un WordPress típico, desactiva todo lo que no necesites.
7. X-XSS-Protection
Qué hace: Activa el filtro XSS integrado del navegador. Aunque los navegadores modernos tienen protección propia, este header agrega una capa extra.
“`apache
Header set X-XSS-Protection “1; mode=block”
“`
Configuración completa para .htaccess
Copia esto al inicio de tu archivo `.htaccess` en la raíz de WordPress:
“`apache
# ── Security Headers ──
Header set Strict-Transport-Security “max-age=31536000; includeSubDomains; preload”
Header set Content-Security-Policy “default-src ‘self’; script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’ https://www.googletagmanager.com https://www.google-analytics.com; style-src ‘self’ ‘unsafe-inline’; img-src ‘self’ data: https:; font-src ‘self’ data:; frame-src https://www.google.com https://www.youtube.com; connect-src ‘self’ https://www.google-analytics.com”
Header set X-Content-Type-Options “nosniff”
Header set X-Frame-Options “SAMEORIGIN”
Header set X-XSS-Protection “1; mode=block”
Header set Referrer-Policy “strict-origin-when-cross-origin”
Header set Permissions-Policy “camera=(), microphone=(), geolocation=(), payment=(self)”
“`
Verificar los headers
Después de configurar, verifica que estén funcionando:
1. Abre DevTools (F12) → pestaña Network → clic en la primera petición → Headers
2. Usa curl: `curl -I https://tusitio.cl`
3. Usa nuestro escáner gratuito: [wpseguro.cl](https://wpseguro.cl) — verifica los 7 headers automáticamente
Errores comunes
– CSP muy restrictivo: Rompe plugins como Elementor, WooCommerce o Google Analytics. Usa `Content-Security-Policy-Report-Only` primero
– No incluir ‘unsafe-inline’: WordPress usa scripts inline. Sin esta directiva, muchas funcionalidades se rompen
– Olvidar subdominios en HSTS: Si tienes subdominios sin SSL, `includeSubDomains` los romperá
– Duplicar headers: Algunos plugins de seguridad agregan headers. Verifica que no se dupliquen
—
¿No quieres configurar los headers manualmente?
Nuestro servicio de hardening incluye la configuración de todos los headers de seguridad, adaptados a los plugins y funcionalidades específicas de tu sitio.
[Ver planes de hardening →](https://wpseguro.cl/#precios)
—
Los headers de seguridad son una de las medidas más efectivas y fáciles de implementar. No hay excusa para no tenerlos.