Si trabajas con WordPress a nivel profesional, hay algo que tarde o temprano acabas descubriendo: la seguridad no es una única capa, sino un conjunto de pequeñas decisiones acumuladas.
Plugins, actualizaciones, permisos, WAF, copias de seguridad… todo suma. Pero hay una pieza que muchas veces se pasa por alto y que, sin embargo, actúa directamente en el navegador del usuario:
Las cabeceras de seguridad HTTP.
Estas cabeceras forman parte de cada respuesta que devuelve tu servidor y le dicen al navegador cómo debe comportarse ante el contenido que recibe. No actúan directamente en el servidor, pero sí pueden evitar que esos ataques tengan éxito en el cliente.
Y aquí está la clave: no protegen tu WordPress desde dentro, sino que refuerzan la capa final del lado del cliente, justo antes de que el usuario vea la página.
- Por qué son importantes
- Cómo funciona una petición HTTP
- Qué son las cabeceras de seguridad HTTP
- Cabeceras de seguridad HTTP principales y cómo usarlas
- Cómo analizar y comprobar cabeceras HTTP
- Cómo configurar cabeceras de seguridad en WordPress
- Cómo probar cabeceras de seguridad sin romper tu web
- Errores comunes al configurar cabeceras de seguridad HTTP
- Estrategia para implantar cabeceras de seguridad en WordPress
- Lista de implementación y verificación de cabeceras de seguridad
- Conclusión
Por qué son importantes
En muchos proyectos WordPress, incluso bien mantenidos, es habitual encontrar situaciones como estas:
- No hay ninguna cabecera de seguridad configurada.
- Se usan valores por defecto poco seguros.
- Se configuran mediante plugins sin entender su impacto.
- Se mezclan configuraciones entre servidor, CDN y WordPress.
El resultado es una falsa sensación de seguridad.
Porque puedes tener:
- HTTPS activo.
- Plugins de seguridad.
- Firewall en el servidor.
Pero si el navegador no tiene instrucciones claras, sigue existiendo superficie de ataque.
¿Qué problemas ayudan a mitigar? Reducen riesgos como XSS, clickjacking, fugas de información o uso indebido de API del navegador.
No eliminan estos problemas en origen, pero sí limitan su impacto en el cliente. Veremos esto en detalle más adelante.
El problema: se configuran mal o no se prueban
Configurar cabeceras HTTP no es complicado. Lo complicado es hacerlo bien.
En muchos casos se configuran sin entender su impacto o sin probar correctamente los cambios, lo que puede generar problemas en producción.
Por eso, en este artículo no solo vamos a ver qué son, sino:
- Cómo funcionan realmente.
- Cómo configurarlas correctamente.
- Cómo probarlas sin romper tu web.
Cómo funciona una petición HTTP
Antes de configurar cabeceras de seguridad, es importante entender dónde encajan dentro del flujo real de una petición web.
Si entiendes este proceso, sabrás exactamente por qué una cabecera funciona (o por qué no lo hace).
Flujo simplificado de una petición web
Cuando un usuario accede a tu web, ocurre algo parecido a esto:
- El navegador solicita una URL (https://tudominio.com).
- El DNS resuelve el dominio a una IP.
- La petición llega al servidor web (Apache, Nginx, LiteSpeed).
- El servidor ejecuta PHP (WordPress).
- Se genera una respuesta.
- El navegador recibe esa respuesta y la interpreta.
Ese último punto es clave. Porque el navegador no solo recibe HTML. Recibe una respuesta HTTP completa.
Qué contiene una respuesta HTTP
Una respuesta HTTP está formada por tres partes principales:
- Línea de estado.
- Cabeceras (headers).
- Cuerpo (body).
Ejemplo simplificado:
HTTP/1.1 200 OKContent-Type: text/htmlX-Frame-Options: SAMEORIGIN<html> <body>Hola mundo</body></html>
Aquí es donde entran en juego las cabeceras de seguridad.
Qué son realmente las cabeceras en este contexto
Las cabeceras HTTP son instrucciones que el servidor envía al navegador antes del contenido.
No son visibles para el usuario, pero el navegador las utiliza para decidir:
- Cómo procesar el contenido.
- Qué comportamientos permitir.
- Qué bloquear directamente.
Es decir, funcionan como una especie de «configuración dinámica» en cada respuesta.
Dónde actúan las cabeceras de seguridad
Las cabeceras de seguridad actúan en el navegador, es decir, en el lado del cliente.
Su función es limitar cómo se interpreta y ejecuta el contenido recibido, añadiendo una capa de control adicional en la última fase del proceso.
Diferencia entre request headers y response headers
No todas las cabeceras son iguales. Hay dos tipos principales:
Request headers
Son las que envía el navegador al servidor.
Ejemplos:
- User-Agent.
- Cookie.
- Accept.
Se usan para informar al servidor sobre el cliente.

Response headers
Son las que envía el servidor al navegador.
Ejemplos:
- Content-Type.
- Cache-Control.
- Strict-Transport-Security.
Aquí es donde trabajan las cabeceras de seguridad.
Por qué el navegador es el último punto de control
Una vez el servidor envía la respuesta, ya no hay vuelta atrás.
Todo lo que ocurra después depende del navegador:
- Interpretación del HTML.
- Ejecución de JavaScript.
- Carga de recursos externos.
Si el navegador no tiene restricciones claras:
- Ejecutará scripts externos sin control.
- Permitirá comportamientos potencialmente peligrosos.
- Podrá ser manipulado por contenido malicioso.
Aquí es donde las cabeceras marcan la diferencia.
Relación con la seguridad por capas
Si recuerdas el enfoque de seguridad por capas en WordPress, las cabeceras están en la última fase del proceso, justo antes de mostrar el contenido al usuario.
Esto las convierte en:
- Una capa final de defensa.
- Un refuerzo del lado del cliente.
- Un mecanismo de control del navegador.
No sustituyen:
- Seguridad en servidor.
- Buen código en PHP.
- Plugins seguros.
Pero sí complementan todo lo anterior.
Qué son las cabeceras de seguridad HTTP
Las cabeceras de seguridad HTTP son cabeceras de respuesta que permiten definir cómo debe comportarse el navegador frente al contenido recibido.
No modifican el contenido de la página ni cambian WordPress, y no bloquean ataques en el servidor.
Lo que hacen es limitar cómo se interpreta y ejecuta ese contenido.
Relación con seguridad, WPO y SEO
Aunque su objetivo principal es la seguridad, estas cabeceras también tienen impacto indirecto en otras áreas:
Seguridad
Evidentemente, es su función principal. Forman parte de lo que podríamos considerar una estrategia de defensa en profundidad, como ya vimos al analizar la seguridad por capas en WordPress.
WPO
No mejoran directamente las métricas como LCP o CLS, pero sí ayudan a:
- Evitar cargas innecesarias de recursos.
- Controlar dependencias externas.
- Reducir comportamientos inesperados del navegador.
SEO
Google no posiciona directamente por tener cabeceras de seguridad, pero sí valora:
- Uso correcto de HTTPS.
- Buenas prácticas de seguridad.
- Experiencia de usuario estable.
Y aquí estas cabeceras aportan confianza técnica.
Para qué sirven realmente
Su objetivo no es evitar que exista una vulnerabilidad, sino evitar que esa vulnerabilidad se pueda explotar fácilmente en el navegador.
Esto es un matiz importante.
Por ejemplo: Si tienes un XSS, la cabecera no lo elimina, pero sí puede impedir que ese script se ejecute. Es decir, trabajan como una capa de mitigación.
Qué tipo de problemas ayudan a mitigar
Las cabeceras de seguridad están diseñadas para reducir riesgos muy concretos del lado del cliente.
XSS (Cross-Site Scripting): Permiten limitar qué scripts se pueden ejecutar y desde qué orígenes. Esto evita:
- Scripts inyectados.
- Código malicioso en formularios.
- Ataques desde contenido externo.
Clickjacking: Evitan que tu web pueda ser cargada dentro de un iframe en otra página. Esto protege frente a:
- Interfaces falsas.
- Botones invisibles sobre tu web.
- Acciones del usuario sin que lo sepa.
MIME sniffing: Los navegadores intentan «adivinar» el tipo de contenido si no está claro. Esto puede provocar que:
- Un archivo se interprete como script.
- Se ejecute código donde no debería.
Las cabeceras evitan este comportamiento.
Fugas de información: Controlan qué información se envía cuando un usuario navega desde tu web a otra. Por ejemplo:
- URL completas.
- Parámetros sensibles.
Uso de API del navegador: Permiten restringir acceso a funcionalidades como:
- Cámara.
- Micrófono.
- Geolocalización.
Esto es especialmente importante en entornos modernos.
Qué no hacen
Aquí es donde suele haber más confusión.
Las cabeceras de seguridad no:
- Protegen tu servidor.
- Corrigen vulnerabilidades en plugins.
- Sustituyen validaciones en PHP.
- Evitan ataques si el navegador no las soporta.
Si tienes una vulnerabilidad crítica, seguirá existiendo.
Las cabeceras solo reducen su impacto en el cliente.
Dependencia del navegador
Las cabeceras funcionan porque el navegador decide respetarlas.
Esto implica dos cosas:
- Navegadores modernos: buena compatibilidad.
- Navegadores antiguos: soporte limitado.
Por eso:
- Algunas cabeceras están obsoletas.
- Otras han evolucionado.
- Algunas se solapan entre sí.
Esto lo veremos en detalle en los siguientes capítulos.
Por qué son una capa especialmente interesante
Una vez entendido qué hacen y qué limitaciones tienen, merece la pena ver por qué estas cabeceras siguen siendo una capa especialmente interesante dentro de la seguridad web. Tienen varias ventajas:
- Son ligeras (no afectan al rendimiento de forma significativa).
- No requieren modificar el código de la aplicación.
- Se pueden aplicar a nivel de servidor o de CDN.
- Actúan en todas las páginas de forma global.
Y además:
- Son invisibles para el usuario.
- Son fáciles de auditar.
- Son relativamente rápidas de implementar.
El enfoque correcto: defensa en profundidad
Las cabeceras deben entenderse como parte de una estrategia más amplia.
No son la solución completa, pero sí una pieza clave dentro de una arquitectura segura.
Combinadas con:
- Buen código.
- Servidor bien configurado.
- Plugins fiables.
- Actualizaciones.
…aportan una capa adicional que marca la diferencia.
El hosting para los desarrolladores más exigentes
Hosting con funcionalidades avanzadas para un control y rendimiento total de tus proyectos.
Cabeceras de seguridad HTTP principales y cómo usarlas
Vamos a ver las cabeceras más importantes que deberías considerar en un proyecto WordPress real.
El objetivo no es listarlas todas, sino entender qué hace cada una, cuándo usarla y qué problemas puede darte si la configuras mal.
Strict-Transport-Security (HSTS)
Fuerza al navegador a usar HTTPS en todas las peticiones futuras.
Cuando un usuario visita tu web por HTTPS y recibe esta cabecera, el navegador recordará durante un tiempo definido que no debe volver a usar HTTP para ese dominio.
Cuándo usarla
- Siempre que tengas HTTPS correctamente configurado.
- Cuando no sirves contenido mixto (http + https).
Ejemplo
Strict-Transport-Security: max-age=31536000; includeSubDomains
Puntos clave
- max-age define el tiempo (en segundos).
- includeSubDomains aplica la regla a subdominios.
Riesgos
- Si lo configuras mal, puedes bloquear el acceso a tu web.
- No debes activarla sin HTTPS totalmente funcional.
Content-Security-Policy (CSP)
Es la cabecera más potente y también la más compleja.
Permite definir qué recursos puede cargar y ejecutar el navegador:
- Scripts.
- Estilos.
- Imágenes.
- iframes.
- Fuentes.
Cuándo usarla
- En proyectos donde quieras controlar dependencias externas.
- Cuando necesitas mitigar XSS.
Ejemplo básico
Content-Security-Policy: default-src 'self'; img-src 'self' https:; script-src 'self';
Qué significa
- default-src 'self': Solo permite recursos del propio dominio.
- img-src 'self' https: Permite imágenes externas por HTTPS y del propio dominio.
- script-src 'self': Solo scripts internos.
Problemas habituales
- Romper funcionalidades (scripts externos, CDN, analytics).
- Bloquear recursos necesarios.

Recomendación
Empieza con una política permisiva y ve restringiendo progresivamente.
X-Frame-Options
Evita que tu web se cargue dentro de un iframe.
Esto protege frente a ataques de clickjacking.
Ejemplo
X-Frame-Options: SAMEORIGIN
Opciones
- DENY: No permite iframes en ningún caso.
- SAMEORIGIN: Solo desde tu propio dominio.
Nota: Hoy en día se puede sustituir por CSP (frame-ancestors), pero sigue siendo ampliamente usado.
X-Content-Type-Options
Evita que el navegador intente adivinar el tipo de contenido.
Ejemplo
X-Content-Type-Options: nosniff
Qué soluciona
- Evita que un archivo se interprete como script si no lo es.
- Reduce riesgos de ejecución inesperada.
Es una cabecera sencilla y prácticamente obligatoria.
Referrer-Policy
Controla qué información se envía en la cabecera referrer cuando un usuario navega desde tu web.
Ejemplo
Referrer-Policy: strict-origin-when-cross-origin
Qué permite
- Ocultar rutas completas.
- Enviar solo el dominio.
- No enviar información.
Uso recomendado
- strict-origin-when-cross-origin suele ser un buen equilibrio.
Permissions-Policy
Permite controlar qué API del navegador están disponibles.
Ejemplo
Permissions-Policy: geolocation=(), camera=(), microphone=()
Qué hace
- Desactiva el acceso a la geolocalización.
- Bloquea cámara y micrófono.
Cuándo usarla
- En la mayoría de webs que no necesitan estas funcionalidades.
X-XSS-Protection
Cabecera histórica que activaba filtros XSS en navegadores antiguos.
Estado actual
- Obsoleta.
- Ignorada por navegadores modernos.
Recomendación
No usar. Es mejor confiar en CSP.
Otras cabeceras modernas (avanzado)
Estas cabeceras son más específicas y se usan en entornos más exigentes.
- Cross-Origin-Resource-Policy (CORP): Controla qué recursos pueden ser cargados desde otros orígenes.
- Cross-Origin-Embedder-Policy (COEP): Define restricciones para cargar recursos externos en contextos aislados.
- Cross-Origin-Opener-Policy (COOP): Aísla el contexto de navegación para evitar ataques entre ventanas.
Cuándo considerarlas
- Aplicaciones complejas.
- Webs con alto nivel de seguridad.
- Proyectos con aislamiento de contexto (SharedArrayBuffer, etc.).
Qué cabeceras deberías implementar como mínimo
En un WordPress estándar, un buen punto de partida sería:
- Strict-Transport-Security.
- Content-Security-Policy (aunque sea básica).
- X-Frame-Options.
- X-Content-Type-Options.
- Referrer-Policy.
- Permissions-Policy.
Cómo analizar y comprobar cabeceras HTTP
¿Cómo sabes qué cabeceras está enviando realmente tu web?
Porque una cosa es lo que crees haber configurado… y otra muy distinta lo que el navegador recibe.
Vamos a ver cómo comprobarlo de forma práctica.
Analizar cabeceras con DevTools
Las herramientas de desarrollo del navegador son la forma más directa y fiable de ver las cabeceras reales.
Paso a paso
- Abre tu web en el navegador.
- Abre DevTools (F12 o clic derecho → Inspeccionar).
- Ve a la pestaña Network.
- Recarga la página.
- Haz clic en la primera petición (document).
- Busca el bloque Response Headers.
Aquí verás todas las cabeceras que devuelve el servidor.

Qué debes revisar
Cuando analices cabeceras, no se trata solo de ver si existen.
Debes comprobar:
- Que están presentes.
- Que tienen valores correctos.
- Que no están duplicadas.
- Que no hay conflictos entre ellas.
Ejemplo típico de error:
- Dos Content-Security-Policy diferentes.
- HSTS configurado en servidor y también en CDN.
Identificar problemas rápidamente
Algunas señales claras de mala configuración:
- Cabeceras repetidas.
- Valores contradictorios.
- Cabeceras esperadas que no aparecen.
- Cabeceras obsoletas activas.
DevTools no te avisa de todo, pero te da la información real.
Filtrar y buscar cabeceras
En DevTools puedes usar el buscador para localizar rápidamente cabeceras concretas:
- «content-security-policy»
- «strict-transport-security»
Esto es útil cuando hay muchas cabeceras en la respuesta.
Usar herramientas online
Además de DevTools, existen herramientas externas que analizan tu web y te dan un informe más claro.
Qué aportan
- Evaluación automática.
- Recomendaciones.
- Detección de errores comunes.
- Puntuación de seguridad.
Cuándo usarlas
- Auditorías iniciales.
- Validación rápida.
- Comparativas.
Comprobar cabeceras desde terminal
Otra forma muy útil, especialmente si trabajas con servidores, es usar curl.
curl -I https://tudominio.com
Esto devuelve solo las cabeceras de la respuesta.
Ventajas
- Rápido.
- Sin interferencias del navegador.
- Ideal para automatización.
Limitaciones
- No ves comportamiento real del navegador.
- No detecta problemas de ejecución de scripts.

Diferencias entre peticiones
Un punto importante: no todas las peticiones tienen las mismas cabeceras.
Por ejemplo:
- HTML principal.
- Archivos JS.
- Imágenes.
- Peticiones AJAX.
Algunas cabeceras solo se aplican al documento principal.
Por eso, asegúrate de analizar la petición correcta.
Cómo configurar cabeceras de seguridad en WordPress
En WordPress puedes configurar cabeceras de seguridad de varias formas. No todas son igual de recomendables, y elegir bien aquí evita problemas a largo plazo.
Enfoque general: dónde configurar las cabeceras
Antes de ver opciones concretas, es importante entender que puedes definir cabeceras en varios niveles:
- Servidor (Apache, Nginx, LiteSpeed).
- CDN o proxy (Cloudflare, etc.).
- PHP / WordPress.
- Plugins.
Y aquí viene la regla clave:
Cuanto más arriba en la pila, mejor.
Es decir:
- Servidor: mejor opción.
- CDN: muy buena alternativa.
- PHP: aceptable.
- Plugins: último recurso.
Configuración mediante plugins
Es la opción más rápida y accesible, especialmente si no tienes acceso al servidor.
Ventajas
- Fácil de implementar.
- Sin tocar configuración del servidor.
- Interfaz gráfica.
Inconvenientes
- Menor control.
- Posibles conflictos.
- Duplicación de cabeceras.
- Dependencia de un plugin más.
Cuándo usar plugins
- Hosting compartido sin acceso a configuración.
- Proyectos pequeños.
- Pruebas iniciales.
Configuración a nivel de servidor (recomendado)
Es la forma más robusta y profesional.
Las cabeceras se envían directamente desde el servidor, antes incluso de que WordPress intervenga.
Ventajas
- Mayor rendimiento.
- Menor riesgo de conflictos.
- Aplicación global.
- Independiente de WordPress.
Apache (.htaccess)
Si usas Apache o LiteSpeed, puedes definir cabeceras en .htaccess.
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"
El archivo .htaccess está en la raíz de tu instalación de WordPress y controla la configuración de Apache. Si no existe o no lo encuentras, pide acceso a tu proveedor de hosting.
Nginx
En Nginx se configuran en el bloque del servidor.
add_header X-Frame-Options "SAMEORIGIN";add_header X-Content-Type-Options "nosniff";add_header Referrer-Policy "strict-origin-when-cross-origin";
Consideraciones importantes
- Evita duplicar cabeceras.
- Comprueba compatibilidad con caché.
- Reinicia el servicio si es necesario.
Configuración mediante PHP en WordPress
Puedes añadir cabeceras usando hooks de WordPress.
Cuándo usarlo
- No tienes acceso al servidor.
- Necesitas lógica condicional.
Ejemplo práctico
add_action('send_headers', function () { header('X-Frame-Options: SAMEORIGIN'); header('X-Content-Type-Options: nosniff'); header('Referrer-Policy: strict-origin-when-cross-origin');});
Limitaciones
- Se ejecuta después del servidor.
- Puede ser ignorado por cachés.
- Menor rendimiento.
Configuración en CDN o proxy
Si usas servicios como Cloudflare, puedes definir cabeceras sin tocar tu servidor.
Ventajas
- Fácil de aplicar.
- Centralizado.
- Ideal para múltiples proyectos.
Cuándo usarlo
- No tienes acceso al servidor.
- Ya trabajas con CDN.
Problemas habituales en la configuración
Cabeceras duplicadas
Ocurre cuando defines cabeceras en varios niveles:
- Servidor + plugin.
- CDN + WordPress.
Resultado:
- Comportamiento impredecible.
- Debug más complejo.
Orden incorrecto
Algunas cabeceras dependen de otras.
Ejemplo:
- CSP mal definida puede bloquear recursos necesarios.
Caché
Las cabeceras pueden quedarse cacheadas:
- En el navegador.
- En CDN.
- En plugins de caché.
Esto puede hacer que los cambios no se reflejen inmediatamente.
Estrategia recomendada
Para un proyecto WordPress típico:
- Configura cabeceras básicas en servidor.
- Usa CDN si ya lo tienes integrado.
- Evita plugins salvo necesidad.
- Usa PHP solo para casos específicos.
Funcionalidades exclusivas
Desbloquea funcionalidades exclusivas de hosting
Cómo probar cabeceras de seguridad sin romper tu web
Llegamos a uno de los puntos más críticos de todo el proceso: probar cambios sin afectar a producción.
Con cabeceras sencillas (como X-Frame-Options o X-Content-Type-Options) el riesgo es bajo. Pero en cuanto trabajas con políticas más estrictas, especialmente Content-Security-Policy, puedes romper fácilmente:
- Scripts.
- Estilos.
- Recursos externos.
- Funcionalidades completas del sitio.
Por eso, la forma de probar es tan importante como la configuración.
El problema: aplicar cambios directamente en producción
Uno de los errores más comunes es este:
- Configuras las cabeceras.
- Las subes a producción.
- Algo deja de funcionar.
- No sabes exactamente qué ha fallado.
Esto ocurre porque muchas cabeceras afectan directamente al comportamiento del navegador.
Estrategia de pruebas recomendada
Antes de entrar en herramientas concretas, quédate con esta secuencia:
- Analizar estado actual.
- Probar cambios en local o en un entorno de pruebas.
- Validar en navegador.
- Aplicar en producción.
- Volver a validar.
Saltarte pasos aquí suele acabar mal.
Uso de Local Overrides en DevTools
Chrome permite modificar respuestas HTTP de forma local sin tocar el servidor.
Esto es especialmente útil para probar cabeceras.
Qué puedes hacer
- Simular una CSP.
- Modificar cabeceras existentes.
- Añadir nuevas cabeceras.
Cómo activarlo
- Abre DevTools.
- Ve a la pestaña Sources.
- Activa Overrides.
- Selecciona una carpeta local.
Flujo de trabajo
- Capturas la respuesta original.
- La guardas como override.
- Modificas las cabeceras.
- Recargas la página.
El navegador usará tu versión modificada en lugar de la real.

Probar Content-Security-Policy en modo report-only
Cuando trabajas con CSP, existe una técnica clave: el modo report-only.
En lugar de bloquear recursos, el navegador solo reporta lo que bloquearía.
Ejemplo
Content-Security-Policy-Report-Only: default-src 'self'; script-src 'self'
Qué consigues
- Detectar problemas sin romper la web.
- Ver qué recursos serían bloqueados.
- Ajustar la política progresivamente.
Uso de extensiones para pruebas rápidas
Extensiones como ModHeader o Requestly permiten modificar cabeceras en tiempo real.
Ventajas
- Muy rápidas de usar.
- No requieren configuración compleja.
Limitaciones
- No reflejan exactamente el comportamiento real del servidor.
- No son ideales para validación final.
Entornos de pruebas
Si trabajas en proyectos más grandes, deberías tener un entorno de pruebas.
Qué permite
- Aplicar cambios reales.
- Validar con usuarios internos.
- Detectar errores antes de producción.
Buenas prácticas
- Copia realista del entorno.
- Misma configuración de servidor.
- Caché similar.
Revisar la consola del navegador
Cada vez que pruebes cabeceras, revisa la consola.
Ahí verás errores como:
- Recursos bloqueados por CSP.
- Problemas de carga.
- Scripts rechazados.
Esto es clave para ajustar políticas.
Pruebas progresivas
Especialmente con CSP, no intentes hacerlo perfecto a la primera.
Enfoque recomendado
- Política permisiva.
- Analizar comportamiento.
- Restringir poco a poco.
- Validar en cada paso.
Validación final
Antes de aplicar cambios en producción:
- Comprueba en DevTools.
- Verifica funcionalidades críticas.
- Revisa consola.
- Testea en diferentes navegadores.
Errores comunes al configurar cabeceras de seguridad HTTP
Llegados a este punto, ya sabes qué cabeceras existen, cómo verlas y cómo configurarlas. Pero, en proyectos reales, el problema rara vez está en «no conocer la teoría».
El problema suele estar en algo mucho más terrenal: configurarlas mal, duplicarlas, aplicarlas en el sitio equivocado o no probarlas lo suficiente.
Vamos a ver los errores más habituales y cómo evitarlos.
Configurar cabeceras sin saber desde dónde se están enviando
Este es probablemente el error más común.
En muchas webs WordPress, las cabeceras pueden salir desde varios puntos al mismo tiempo:
- El servidor web.
- Un proxy o CDN.
- WordPress vía PHP.
- Un plugin de seguridad.
Si no sabes cuál de esas capas está enviando cada cabecera, el resultado puede ser confuso.
Qué puede pasar
- Cabeceras duplicadas.
- Valores distintos para la misma cabecera.
- Cambios que aparentemente no se aplican.
Cómo evitarlo
Haz primero un inventario de la configuración actual y decide un único punto principal de gestión.
Duplicar cabeceras en distintas capas
Muy relacionado con el punto anterior.
Por ejemplo:
- HSTS en servidor y también en Cloudflare.
- CSP en plugin y además en .htaccess.
- Referrer-Policy en PHP y en Nginx.
Esto puede provocar desde simples duplicidades hasta comportamientos inconsistentes.
Cómo evitarlo
Centraliza la gestión siempre que sea posible.
Si una cabecera está definida en servidor, no la vuelvas a definir en WordPress, salvo que exista una necesidad real y controlada.
Empezar por una CSP demasiado restrictiva
La Content-Security-Policy es la cabecera más potente, pero también la que más rompe cosas si la aplicas sin cuidado.
Un error muy habitual es intentar pasar de cero a una política muy cerrada en una sola configuración.
Qué suele romper
- Scripts inline.
- Librerías externas.
- Google Analytics o Tag Manager.
- Fuentes web.
- Recursos de CDN.
Cómo evitarlo
Empieza con una política más abierta o en modo de solo informe, revisa qué recursos necesita realmente tu web y ve ajustando poco a poco.
No revisar la consola del navegador
Muchas veces se aplican cabeceras y se comprueba únicamente si «la página carga».
Eso no basta.
Puedes tener una web aparentemente funcional y, sin embargo:
- Scripts bloqueados.
- Errores silenciosos.
- Estilos que no cargan.
- Recursos externos rechazados.
Cómo evitarlo
Después de cada cambio, revisa siempre la consola y la pestaña Network de DevTools.
No tener en cuenta la caché
Otro error clásico: haces un cambio, recargas la web y no ves nada distinto.
Y no es que la configuración esté mal, es que la cabecera puede estar siendo servida desde:
- Caché del navegador.
- Caché del servidor.
- Caché del plugin.
- Caché del CDN.
Cómo evitarlo
Vacía todas las capas de caché relevantes y vuelve a comprobar las cabeceras reales.
Especialmente con HSTS y CSP, esto es crítico.
Usar cabeceras obsoletas como si siguieran siendo válidas
No todas las cabeceras históricas siguen siendo útiles hoy.
Algunas se mantienen por costumbre más que por necesidad.
Caso típico
X-XSS-Protection
Durante años fue habitual añadirla casi por inercia, pero hoy en día los navegadores modernos ya no la necesitan y su uso no aporta valor real en la mayoría de los escenarios.
Cómo evitarlo
Prioriza cabeceras actuales y con soporte moderno. Mejor pocas, bien elegidas y bien configuradas, que muchas heredadas sin función práctica.
Aplicar HSTS demasiado pronto
HSTS parece una cabecera sencilla, pero puede volverse problemática si la activas antes de tiempo.
Riesgos habituales
- Subdominios sin HTTPS.
- Recursos mixtos todavía presentes.
- Certificados mal configurados.
- Bloqueo de acceso para usuarios recurrentes.
Cómo evitarlo
Actívala solo cuando todo el entorno HTTPS esté correctamente resuelto y empieza con tiempos más bajos antes de llevarla a periodos largos.
No probar en diferentes navegadores
Aunque el soporte moderno es bastante bueno, no todos los navegadores interpretan exactamente igual todas las políticas, especialmente las más avanzadas.
Cómo evitarlo
Valida al menos en:
- Chrome o Chromium.
- Firefox.
- Edge o Safari si el proyecto lo requiere.
No hace falta una batería enorme de pruebas, pero sí comprobar que no dependes de un único navegador durante la validación.
Romper funcionalidades del panel o de terceros
En WordPress es fácil centrarse solo en el frontal y olvidarse de que hay más partes afectadas:
- /wp-admin/
- Editor de bloques
- Formularios externos.
- Mapas embebidos.
- Pasarelas de pago.
- Sistemas de analítica.
Cómo evitarlo
Prueba siempre los flujos críticos del proyecto, no solo la página de inicio o una página estática.
Querer resolver la seguridad solo con cabeceras
Este error no rompe la web, pero sí rompe el enfoque.
Las cabeceras son útiles, pero no sustituyen:
- Actualizaciones.
- Hardening del servidor.
- Validación de entradas.
- Control de accesos.
- Copias de seguridad.
- Auditorías periódicas.
Cómo evitarlo
Trátalas como una capa más dentro de una estrategia de seguridad completa.
No documentar los cambios
Cuando una configuración funciona, muchas veces se deja ahí y nadie documenta:
- Qué se aplicó.
- Dónde se aplicó.
- Por qué se eligió ese valor.
- Qué dependencias hay.
Esto complica mucho el mantenimiento futuro.
Cómo evitarlo
Documenta siempre:
- Cabeceras activas.
- Lugar de configuración.
- Fecha de cambio.
- Motivos.
- Pruebas realizadas.
Estrategia para implantar cabeceras de seguridad en WordPress
Hemos visto qué cabeceras existen, cómo analizarlas, cómo configurarlas y qué errores conviene evitar. La siguiente pregunta lógica es:
¿Por dónde empiezo en un proyecto real?
Porque una cosa es conocer las piezas y otra muy distinta aplicarlas con criterio, en el orden adecuado y sin complicarte más de la cuenta.
Objetivo: Mejorar la seguridad sin romper funcionalidades
El enfoque correcto no consiste en añadir todas las cabeceras posibles en una sola tarde.
Consiste en:
- Aplicar las más útiles primero.
- Validar su efecto.
- Evitar duplicidades.
- Dejar las políticas más exigentes para cuando conozcas bien el comportamiento del sitio.
Dicho de otra forma: mejor una implementación parcial pero sólida que una configuración ambiciosa y frágil.
Punto de partida: auditar antes de tocar nada
Antes de cambiar una sola línea, necesitas saber cuál es la situación actual.
Qué deberías revisar primero
- Cabeceras que ya se están enviando.
- Dónde se están definiendo.
- Uso de CDN o proxy.
- Caché activa en servidor o plugin.
- Dependencias externas del sitio.
Qué páginas conviene comprobar
No te quedes solo con la portada. Revisa al menos:
- La página de inicio.
- Una entrada.
- Una página.
- Una plantilla especial, si existe.
- Formularios.
- El área de administración si vas a aplicar cambios globales.
Esto te dará una línea base fiable.
Primer paso: asegurar HTTPS y preparar HSTS
Antes de hablar de políticas más finas, la base tiene que estar resuelta.
Qué deberías tener claro
- Todo el sitio carga por HTTPS.
- No hay contenido mixto.
- Los certificados están correctamente configurados.
- Los subdominios críticos también usan HTTPS, si vas a incluirlos.
Una vez que eso esté resuelto, HSTS pasa a ser una de las primeras cabeceras recomendables.
Enfoque prudente
Empieza con una política conservadora y válida durante unos días antes de aumentar tiempos o incluir subdominios.
Segundo paso: aplicar cabeceras básicas y seguras
Hay varias cabeceras que, en la mayoría de los sitios, ofrecen muy buena relación entre beneficio y riesgo.
Buen punto de partida
- X-Content-Type-Options
- X-Frame-Options
- Referrer-Policy
- Permissions-Policy
Estas suelen ser relativamente fáciles de implantar y, salvo casos concretos, no deberían romper funcionalidades si están bien planteadas.
Por qué empezar por aquí
Porque te permiten mejorar la seguridad sin entrar todavía en la parte más sensible, que casi siempre será CSP.
Tercer paso: decidir dónde vas a gestionar las cabeceras
Este paso es más importante de lo que parece.
Si no decides un punto de gestión claro, terminarás con configuraciones mezcladas y mantenimiento innecesario.
Orden recomendado
- Servidor.
- CDN o proxy.
- WordPress vía PHP.
- Plugin.
Regla práctica
Elige un nivel principal y mantén ahí la mayor parte de la configuración.
Solo baja a otro nivel cuando exista una razón técnica concreta.
Cuarto paso: Inventariar recursos externos antes de implantar CSP
Aquí es donde conviene frenar un poco.
Antes de aplicar una Content-Security-Policy, debes saber qué carga tu web realmente.
Recursos que suelen aparecer en WordPress:
- Fuentes externas.
- Scripts de analítica.
- Mapas.
- Vídeos embebidos.
- reCAPTCHA.
- CDN.
- Sistemas de anuncios.
- Widgets de terceros.
Si no haces este inventario, lo más probable es que tu primera CSP rompa algo importante.
Quinto paso: empezar la CSP en modo observación
No intentes bloquear desde el primer momento.
Lo más sensato es comenzar observando qué ocurriría si la política se aplicase de forma estricta.
Ventajas de este enfoque:
- Detectas dependencias reales.
- Ves qué recursos entrarían en conflicto.
- Ajustas la política con calma.
- Reduces muchísimo el riesgo de romper producción.
Una vez tengas claro qué necesita el sitio, ya puedes pasar a una política aplicada de verdad.
Sexto paso: endurecer progresivamente
La implantación buena casi nunca es inmediata. Suele ser iterativa.
Flujo recomendado:
- Añades cabeceras básicas.
- Compruebas que todo sigue funcionando.
- Inicias CSP en modo de observación.
- Ajustas fuentes, scripts, estilos e iframes permitidos.
- Pasas a política activa.
- Sigues revisando cambios tras nuevas integraciones o plugins.
Este enfoque encaja muy bien con el mantenimiento real de un WordPress.
Séptimo paso: probar siempre flujos críticos
No basta con abrir la página principal y ver que carga.
Tienes que revisar aquello que realmente importa en el proyecto.
Ejemplos de flujos críticos:
- Navegación principal.
- Formularios.
- Buscador.
- Editor de bloques.
- Carrito y pantalla de pago si hay tienda.
- Acceso.
- Mapas, vídeos o integraciones externas.
Si una cabecera rompe uno de estos puntos, la implementación no está lista.
Octavo paso: documentar y dejar mantenimiento preparado
Las cabeceras de seguridad no son una tarea de una sola vez.
Cada nuevo plugin, script externo o cambio de infraestructura puede obligarte a revisar alguna política, especialmente CSP.
Qué conviene dejar documentado
- Qué cabeceras están activas.
- Dónde se configuran.
- Qué valor tiene cada una.
- Qué excepciones se han añadido.
- Qué pruebas se han hecho.
- Cuándo se revisó por última vez.
Esto simplifica muchísimo el mantenimiento futuro.
Estrategia resumida para un WordPress típico
- Auditar situación actual.
- Confirmar HTTPS completo.
- Añadir cabeceras básicas de bajo riesgo.
- Centralizar configuración en un único nivel principal.
- Inventariar recursos externos.
- Probar CSP en modo de observación.
- Endurecer la política poco a poco.
- Validar flujos críticos.
- Documentar y revisar periódicamente.
No todos los proyectos necesitan el mismo nivel de exigencia.
Un WordPress corporativo sencillo puede funcionar perfectamente con una base sólida y una CSP moderada.
Un WooCommerce o un proyecto con muchas integraciones necesitará más pruebas, más excepciones y una política más trabajada.
Una aplicación web o un entorno más sensible puede requerir políticas más avanzadas y revisión continua.
La clave está en adaptar la estrategia al contexto real del proyecto.
Hosting de alto rendimiento
Optimiza la velocidad y eficiencia de tu web con un hosting potente, fiable y sin límites.
Lista de implementación y verificación de cabeceras de seguridad
Esta lista está pensada para validar configuraciones existentes, implementar cabeceras desde cero o auditar un sitio de cliente de forma rápida.
Lista básica (rápida)
Si necesitas una revisión rápida, estos son los mínimos:
- El sitio funciona completamente bajo HTTPS.
- No hay contenido mixto.
- Existe HSTS correctamente configurado.
- Están activas cabeceras básicas (X-Frame-Options, X-Content-Type-Options).
- Hay una política de Referrer definida.
- No hay cabeceras duplicadas.
- Todo funciona correctamente en el navegador.
Lista técnica detallada
1. Infraestructura y base
- HTTPS activo en todo el sitio.
- Certificado válido y actualizado.
- Redirecciones HTTP → HTTPS correctas.
- Subdominios revisados (si se usan).
2. Cabeceras básicas
- X-Content-Type-Options activo.
- X-Frame-Options configurado.
- Referrer-Policy definida.
- Permissions-Policy ajustada al proyecto.
3. HSTS
- HSTS activo.
- max-age adecuado.
- includeSubDomains solo si aplica.
- No hay contenido mixto.
4. Content-Security-Policy
- Existe una CSP definida (aunque sea básica).
- Se ha probado previamente.
- No rompe funcionalidades críticas.
- Se ha ajustado en función de recursos reales.
5. Ubicación de la configuración
- Las cabeceras se gestionan desde un único nivel principal.
- No hay duplicidades entre servidor, CDN y WordPress.
- Está claro dónde se modifica cada cabecera.
6. Pruebas en navegador
- Revisión en DevTools (Network + Console).
- No hay errores de recursos bloqueados.
- No hay advertencias relevantes.
- Funcionalidades críticas verificadas.
7. Caché
- Caché de navegador invalidada.
- Caché de servidor revisada.
- Caché de CDN purgada si aplica.
8. Compatibilidad
- Probado en al menos dos navegadores.
- Sin diferencias críticas de comportamiento.
9. Documentación
- Cabeceras activas documentadas.
- Ubicación de configuración definida.
- Cambios registrados.
- Excepciones justificadas.
10. Mantenimiento
- Revisión tras instalar plugins nuevos.
- Revisión tras añadir scripts externos.
- Auditoría periódica.
Lista de errores a evitar
Antes de dar por buena la implementación, revisa esto:
- No hay cabeceras duplicadas.
- No hay cabeceras obsoletas innecesarias.
- No hay CSP excesivamente restrictiva sin pruebas.
- No hay configuraciones repartidas sin control.
Flujo rápido de validación
Si necesitas validar un proyecto en pocos minutos:
- Abre DevTools.
- Revisa cabeceras en la petición principal.
- Comprueba la consola de errores.
- Navega por páginas clave.
- Valida formularios y scripts.
Con esto puedes detectar la mayoría de los problemas rápidamente.
Cuándo considerar la implementación completa como válida
Puedes dar por buena la configuración cuando:
- No hay errores en consola.
- Todas las funcionalidades funcionan correctamente.
- Las cabeceras están presentes y sin duplicidades.
- La CSP no bloquea recursos necesarios.
- La configuración está documentada.
Conclusión
Las cabeceras de seguridad HTTP son una de esas capas que, sin ser complejas de implementar, pueden marcar una diferencia real en la seguridad de un proyecto WordPress.
No sustituyen otras medidas, pero sí refuerzan el comportamiento del navegador frente a posibles ataques, reduciendo su impacto en el cliente.
La clave no está en añadirlas todas sin más, sino en entender qué hace cada una, aplicarlas de forma progresiva y validarlas correctamente.
Con una base bien configurada y una estrategia clara, puedes mejorar notablemente la seguridad de tu web sin complicar el mantenimiento ni comprometer su funcionamiento.
No utilices los comentarios para hacer preguntas, solicitar ayuda o informar de errores. Para ello ponemos a tu disposición nuestros foros o el formulario de contacto con el servicio de soporte.
Antes de publicar un comentario, lee nuestras normas sobre comentarios.