Inicio / Blog / Cómo asegurar las cabeceras de WordPress y mejorar su seguridad

Cómo asegurar las cabeceras de WordPress y mejorar su seguridad

Luis Ruiz

Escrito por Luis Ruiz el Actualizado el

La seguridad en WordPress es un tema que no debe tomarse a la ligera. Aunque WordPress es un CMS seguro por defecto, hay muchas configuraciones adicionales que pueden reforzar su protección frente a ataques cibernéticos.

Uno de los aspectos menos conocidos, pero más efectivos para mejorar la seguridad de tu sitio web, es asegurar las cabeceras HTTP. Si bien no es obligatorio configurarlas, implementarlas correctamente evitará vulnerabilidades como inyecciones de código, ataques XSS y Clickjacking, además de proteger la privacidad de los usuarios.

En esta publicación, te explicaré qué son las cabeceras de seguridad HTTP, cuáles debes activar, cómo configurarlas correctamente y qué herramientas usar para comprobarlas.

¡Vamos a ello!

 ¿Qué son las cabeceras de seguridad HTTP en WordPress?

Las cabeceras HTTP son instrucciones enviadas por el servidor al navegador del usuario cada vez que alguien accede a tu sitio web. Estas cabeceras pueden mejorar la seguridad de tu página evitando que ciertos ataques o scripts maliciosos se ejecuten en el navegador de los visitantes.

¿Por qué WordPress no las incluye por defecto?

WordPress no fuerza estas configuraciones porque cada sitio web tiene necesidades específicas y algunas cabeceras pueden afectar la funcionalidad de ciertos plugins o temas. Sin embargo, es recomendable configurarlas para reducir riesgos de seguridad.

⚠️ Si tu sitio web será sometido a una auditoría de seguridad, este es un paso clave para demostrar que has tomado las medidas necesarias para protegerlo.

Beneficios de implementar cabeceras de seguridad en WordPress

Configurar correctamente las cabeceras de seguridad en WordPress tiene múltiples ventajas. Aquí algunas de las más importantes:

  • Evita ataques comunes como inyecciones de código, Cross-Site Scripting (XSS) y Clickjacking.
  • Protege la privacidad de los visitantes limitando la información compartida con terceros.
  • Mejora la confianza del usuario, ya que un sitio seguro genera más credibilidad.
  • Cumple con auditorías de seguridad en caso de que debas demostrar que tu sitio sigue buenas prácticas.
  • Bloquea conexiones inseguras, asegurando que siempre se use HTTPS en lugar de HTTP.

Mi experiencia personal: Aunque no es obligatorio, implementar estas cabeceras es fundamental para la seguridad. Si alguna vez pasas por una auditoría, verás cómo esto ayuda a demostrar que tu sitio está bien protegido.

Principales cabeceras de seguridad HTTP y su función

Aquí tienes las cabeceras de seguridad más importantes y su propósito:

  • Strict-Transport-Security (HSTS): Obliga a los navegadores a usar HTTPS en lugar de HTTP.
  • X-Frame-Options: Evita ataques de Clickjacking bloqueando la incrustación de tu web en otros sitios.
  • X-Content-Type-Options: Bloquea la ejecución de archivos con tipos MIME sospechosos.
  • Content-Security-Policy (CSP): Restringe qué scripts y recursos pueden cargarse en tu sitio.
  • Referrer-Policy: Controla qué información del usuario se comparte con otros sitios.
  • Permissions-Policy: Restringe el acceso a APIs del navegador como la cámara o el micrófono.

Ahora veamos cómo implementarlas.

Cómo añadir cabeceras de seguridad en WordPress

Tienes cuatro métodos para agregar cabeceras HTTP en WordPress.

Método 1:  plugins para gestionar cabeceras de seguridad en WordPress

Los plugins facilitan la configuración sin necesidad de tocar código. Aquí tienes unos plugins que te recomendamos para configurar cabeceras de seguridad:

 Método 2: En tu tema mediante PHP

Para añadirlo en tu tema puedes hacerlo en el archivo funtions.php por ejemplo, o en un plugin de funcionalidades utilizando la acción «send_headers», añadiendo el siguiente código:

// Cabecera como medidas de seguridad
add_action( 'send_headers', 'prefix_add_header_security' );
function prefix_add_header_security() {
    // Verifica que la función se está llamando
    // error_log( 'Ejecutando add_header_security' );
    // Añade las cabeceras de seguridad
    header( 'X-Content-Type-Options: nosniff' );
    header( 'X-Frame-Options: SAMEORIGIN' );
    header( 'X-XSS-Protection: 0;mode=block' );
    header( 'Content-Security-Policy: frame-ancestors "self" https://*.tu-dominio.com:*;' );
    header( 'Referrer-Policy: no-referrer' );
    header( 'Strict-Transport-Security: max-age=63072000; includeSubDomains; preload' );
    header( 'Permissions-Policy: accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), encrypted-media=(), fullscreen=*, geolocation=(self), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=*, picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), xr-spatial-tracking=(), gamepad=(), serial=(), window-placement=()' );
    header( "Feature-Policy: display-capture 'self'" );
    header( 'X-Permitted-Cross-Domain-Policies: none' );
}

Es posible que este código no te funcione correctamente, por ejemplo a mí me daba problemas con la caché. Con el dominio me daba error, pero añadiendo a la url “?r=1” funcionaba perfectamente.

Lo solucioné quitándolo el código PHP y haciéndolo a través del servidor como te muestro más adelante.

Método 3: En tu servidor

En mi opinión, este es el mejor metodos de todos. Vamos a ver como configurar las cabeceras en un servidor Apache o Nginx.

Asegurar las cabeceras de WordPress con htaccess

Si usas un servidor Apache, agrega esto al fichero .htaccess:

# BEGIN Security Headers
<IfModule mod_headers.c>
	Header always set X-Content-Type-Options "nosniff"
	Header always set X-Frame-Options "SAMEORIGIN"
	Header always set X-XSS-Protection "0; mode=block"
	Header always set Content-Security-Policy "default-src 'self'; img-src 'self' https://*.tu-dominio.com data: https://secure.gravatar.com; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'; font-src 'self' data:; frame-ancestors 'self' https://*.tu-dominio.com:* https://iframe.mediadelivery.net;"
	Header always set Referrer-Policy "strict-origin-when-cross-origin"
	Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
	Header always set Permissions-Policy "accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), encrypted-media=(), fullscreen=, geolocation=(self), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=, picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(self), usb=(), xr-spatial-tracking=(), gamepad=(), serial=(), window-placement=()"
	Header always set Feature-Policy "display-capture 'self'"
	Header always set X-Permitted-Cross-Domain-Policies "none"
</IfModule>
# END Security Headers

Es preferible colocar las cabeceras de seguridad después de # END WordPress, porque cualquier directiva que pongas entre # BEGIN WordPress y # END WordPress puede ser sobrescrita por WordPress durante una actualización o cuando se reescribe el archivo .htaccess.

Si tienes algún plugin de caché como WP Rocket activo, vacía la caché para asegurarte de que los cambios se apliquen.

Asegurar las cabeceras de WordPress con Nginx

Para añadir las cabeceras de seguridad en un servidor Nginx, necesitas editar el archivo de configuración del sitio correspondiente. Este archivo generalmente se encuentra en /etc/nginx/sites-available/ y luego se enlaza a /etc/nginx/sites-enabled/.

Abre el archivo de configuración del sitio: Abre el archivo correspondiente a tu sitio. Por ejemplo, si el archivo de configuración se llama «tu-dominio.com», puedes abrirlo con el siguiente comando:

sudo nano /etc/nginx/sites-available/tu-dominio.com

Y añade las cabeceras de seguridad: Dentro del bloque server { }, añade las siguientes directivas de cabecera.

server {
    listen 80;
    server_name tu-dominio.com www.tu-dominio.com;
    # Otros bloques y directivas
    # Añade las cabeceras de seguridad
    add_header X-Content-Type-Options "nosniff";
    add_header X-Frame-Options "SAMEORIGIN";
    add_header X-XSS-Protection "0; mode=block";
    add_header Content-Security-Policy "frame-ancestors 'self' https://*.tu-dominio.com:* https://iframe.mediadelivery.net;";
    add_header Referrer-Policy "strict-origin-when-cross-origin";
    add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
    add_header Permissions-Policy "accelerometer=(), autoplay=(), camera=(), cross-origin-isolated=(), encrypted-media=(), fullscreen=*, geolocation=(self), gyroscope=(), keyboard-map=(), magnetometer=(), microphone=(), midi=(), payment=*, picture-in-picture=(), publickey-credentials-get=(), screen-wake-lock=(), sync-xhr=(), usb=(), xr-spatial-tracking=(), gamepad=(), serial=(), window-placement=()";
    add_header Feature-Policy "display-capture 'self'";
    add_header X-Permitted-Cross-Domain-Policies "none";
    # Resto de tu configuración
}

Después de añadir las cabeceras de seguridad, guarda y cierra el archivo (Ctrl+O y Ctrl+X si estás usando nano).

Antes de reiniciar Nginx, asegúrate de que la configuración es válida ejecutando:

sudo nginx -t

Y si todo va bien, reinicia Nginx para aplicar los cambios:

sudo systemctl restart nginx

Método 4: Configuración en Cloudflare

Si usas Cloudflare puedes modificar los headers independientemente de que tu cuenta sea gratuita o de pago. Con la gratuita tienes un máximo de 10 transformaciones, pero puedes usar una para modificar todas las cabeceras que quieras.

Sigue estos pasos:

  • Ve a Reglas > Información general > Reglas de transformación de encabezados de solicitudes
  • Creamos una regla con «Response Header Transform Rule»
  • Añade las cabeceras como Strict-Transport-Security, X-Frame-Options, etc.
  • Guarda y comprueba que todo funciona correctamente.

Te dejo unas capturas con los pasos.

Verificación de cabeceras de seguridad en WordPress

Después de mejorar la seguridad de las cabeceras de tu web, te dejo unas herramientas online para que puedas revisar si todo es correcto.

  • Security Headers: Analiza las cabeceras de seguridad de un sitio web y proporciona una calificación basada en buenas prácticas, destacando configuraciones incorrectas o ausentes.
  • HSTS Preload: Verifica si un dominio cumple con los requisitos para ser incluido en la lista de precarga de HSTS, lo que obliga a los navegadores a usar HTTPS de forma predeterminada.
  • DomSignal: Escanea y proporciona un informe detallado sobre la seguridad de las cabeceras HTTP, CSP, CORS y otras configuraciones de protección de una web.
  • CSP Evaluator: Evalúa las políticas de Content Security Policy (CSP) de un sitio web para identificar configuraciones inseguras y recomendar mejoras.

Personalmente creo que la mejor herramienta es «Security Headers», muestra la información de una forma sencilla y visualmente para mi gusto es la mejor. Además, es perfecta si tienes que hacer un informe a tu cliente.

Solución de problemas comunes al asegurar cabeceras

Implementar cabeceras de seguridad en WordPress es un proceso sencillo, pero en algunos casos pueden surgir problemas que afectan la carga del sitio, o hacen que los cambios no se reflejen correctamente. A continuación, te explicamos los errores más comunes y cómo solucionarlo:

  • Error 500: Revisa la sintaxis del .htaccess o nginx.conf.
  • Error 153 al insertar vídeos de YouTube: Este error suele aparecer cuando la cabecera Content-Security-Policy bloquea los recursos de YouTube. Solución al Error 153 de YouTube causado por Content-Security-Policy.
  • Conflictos con plugins: Algunos plugins de seguridad ya configuran cabeceras; revisa sus ajustes antes de añadirlas manualmente.
  • Falta de efecto: Asegúrate de limpiar la caché del servidor/CDN para que los cambios sean visibles.
  • Bloqueo de contenido legítimo: Si tu web deja de cargar scripts o estilos, revisa la Content-Security-Policy y ajusta las reglas.
  • Pruebas en producción: Siempre usa entornos de prueba antes de aplicar cambios en el sitio en vivo.

Si después de estas soluciones sigues teniendo problemas, revisa los registros de errores del servidor, o consulta con tu proveedor de hosting para asegurarte de que las cabeceras se están enviando correctamente.

Preguntas Frecuentes sobre Cabeceras de Seguridad en WordPress

Sí, las cabeceras de seguridad pueden influir en el SEO de varias maneras:

  • Mejoran la seguridad de tu sitio, lo que reduce riesgos de ataques y hackeos. Google favorece sitios seguros en su ranking.
  • Refuerzan la confianza del usuario, evitando ataques como Clickjacking o XSS, lo que puede disminuir la tasa de rebote y mejorar el tiempo de permanencia en la web.
  • Google Lighthouse y Core Web Vitals evalúan la seguridad del sitio. Un sitio con buenas cabeceras obtendrá mejor puntuación en auditorías.

Configurar correctamente las cabeceras puede ser un factor positivo para el SEO y la experiencia del usuario.

No es obligatorio, pero sí recomendable. Algunas cabeceras son altamente recomendadas para cualquier sitio web, como:

  • Strict-Transport-Security (HSTS) → Obliga al sitio a usar HTTPS.
  • X-Frame-Options → Evita ataques de Clickjacking.
  • X-XSS-Protection → Protege contra ataques XSS.
  • Content-Security-Policy (CSP) → Limita la carga de contenido sospechoso.

Otras cabeceras pueden depender de la configuración de tu servidor y necesidades específicas.

Si configuraste las cabeceras y no aparecen en las pruebas, sigue estos pasos:

  • Limpia la caché del navegador y del servidor/CDN. Cloudflare, LiteSpeed y WP Rocket pueden almacenar versiones antiguas del sitio.
  • Verifica que las cabeceras no estén sobrescritas por otro servicio o plugin. Algunos plugins de seguridad gestionan sus propias cabeceras.
  • Confirma que los cambios en .htaccess o nginx.conf sean correctos. Un error en la sintaxis podría anular la configuración.
  • Revisa los logs del servidor para detectar errores o conflictos.

Si aún así sigues teniendo problemas, prueba aconfigurarlas en Cloudflare (Response Header Transform Rule), o con un plugin de seguridad como HTTP Headers o Sucuri.

Algunos plugins como Sucuri Security, iThemes Security y HTTP Headers pueden añadir ciertas cabeceras de seguridad automáticamente, pero no siempre incluyen todas.

Por ejemplo, Sucuri puede configurar X-XSS-Protection y X-Frame-Options, pero si necesitas Content-Security-Policy (CSP), es posible que debas agregarlo manualmente.

Si no quieres tocar código, un plugin como HTTP Headers puede ayudarte a personalizar fácilmente todas las cabeceras necesarias.

¿Cuál es la diferencia entre configurar cabeceras en .htaccess, Nginx y Cloudflare?

  • .htaccess (Apache) → Solo funciona si usas un servidor Apache. Se aplica en el servidor antes de enviar la respuesta al navegador.
  • nginx.conf (Nginx) → Similar a .htaccess, pero exclusivo para servidores Nginx.
  • Cloudflare (Response Header Transform Rule) → Se aplica a nivel de CDN, sin necesidad de tocar archivos del servidor.

Si usas Cloudflare, es recomendable configurarlas allí para que las cabeceras se apliquen antes de que el tráfico llegue a tu servidor.

No. Las cabeceras son una capa de seguridad, pero no sustituyen otras medidas esenciales, como:

  • Usar HTTPS y certificados SSL.
  • Mantener WordPress, temas y plugins actualizados
  • Implementar firewalls y protección contra ataques de fuerza bruta (ej. Wordfence, Cloudflare WAF).
  • Realizar copias de seguridad regulares con UpdraftPlus o BackupBuddy.
  • Restringir accesos y permisos para evitar modificaciones no autorizadas.

Las cabeceras son un complemento importante, pero no la única defensa que necesitas.

No de manera significativa. Las cabeceras son datos pequeños enviados en la respuesta HTTP, y su impacto en el rendimiento es mínimo, o nulo.

En algunos casos, pueden incluso mejorar la velocidad al bloquear scripts externos innecesarios (Content-Security-Policy), o habilitar la carga segura (Strict-Transport-Security).

Si usas un CDN como Cloudflare, las cabeceras se aplican sin afectar el rendimiento de tu servidor.

No necesariamente. Si prefieres evitar código, puedes usar plugins como HTTP Headers o iThemes Security para configurarlas fácilmente.

Si tienes experiencia con servidores, puedes configurarlas manualmente en .htaccess, nginx.conf o Cloudflare para mayor control.

Refuerza la Seguridad de WordPress con Cabeceras HTTP: Conclusión Final

Asegurar las cabeceras de WordPress es una de las mejores formas de fortalecer la seguridad de tu web. No es obligatorio, pero sí imprescindible si quieres evitar ataques y cumplir con auditorías. También mejora la confianza de los usuarios.

Ya sea configurándolas en .htaccess, Nginx, Cloudflare o mediante plugins, es importante asegurarte de que estén bien implementadas y en funcionamiento.

Recuerda: Implementarlas no cuesta mucho esfuerzo y puede evitar muchos problemas de seguridad en el futuro.

Resumen de privacidad

Esta web utiliza cookies para que podamos ofrecerte la mejor experiencia de usuario posible. La información de las cookies se almacena en tu navegador y realiza funciones tales como reconocerte cuando vuelves a nuestra web o ayudar a nuestro equipo a comprender qué secciones de la web encuentras más interesantes y útiles.

Cookies estrictamente necesarias

Las cookies estrictamente necesarias tiene que activarse siempre para que podamos guardar tus preferencias de ajustes de cookies.

Cookies de terceros

Esta web utiliza Google Analytics para recopilar información anónima tal como el número de visitantes del sitio, o las páginas más populares.

Dejar esta cookie activa nos permite mejorar nuestra web.