Cómo añadir cabeceras de respuesta HTTP seguras en WordPress

Uno de los aspectos más importantes a tratar cuando contamos con un proyecto web, sin duda alguna, es la seguridad. Si eres asiduo a esta web sabrás que lo repetimos una y otra vez hasta la saciedad. Y es que la mayoría de problemas a la hora de mantener un WordPress suelen provenir de fallas en seguridad. Es un aspecto que se suele descuidar muy a la ligera, pensando en que los hackeos y ataques siempre le ocurren “a otros” sin pensar, que el próximo “otro” podamos ser nosotros mismos. Es por eso que siempre que podemos, dedicamos un artículo a aumentar la seguridad de nuestros proyectos. En esta ocasión, veremos cómo añadir cabeceras de respuesta HTTP seguras en WordPress.

Como sabéis, WordPress es la plataforma más utilizada a la hora de implementar webs. Cabe decir que el 27 por ciento de las webs que pueblan todo Internet, están desarrolladas con WordPress. Es por eso que el excelente equipo del CMS open source siempre está al tanto de las vulnerabilidades, errores y demás temas relacionados con la seguridad. WordPress es un caramelito para los hackers, pero los técnicos de la plataforma no se lo ponen nada fácil.

Aún así, nunca está de más aumentar la seguridad de nuestro proyecto mediante nuestros propios medios. Un ejemplo claro de esto es la inserción de cabeceras de respuesta HTTP seguras en WordPress. ¿No sabes a qué me refiero? Tranquilo, te lo explico a continuación.

¿Qué son las cabeceras de respuesta?

cabeceras de respuesta

Cuando visitas un sitio web, el navegador realiza una solicitud al servidor web que la aloja. Inmediatamente después, el servidor web responde con otra solicitud que contiene unas cabeceras (las llamadas cabeceras de respuesta). Estas cabeceras contienen información sobre el control de la caché, el tipo de contenido que se va a mostrar en el navegador, cómo está codificado dicho contenido, a qué hora se ha realizado la conexión… Si aumentamos la seguridad de estos encabezados de respuesta agregaremos una capa más de seguridad en nuestra web que ayudará a mitigar posibles ataques y vulnerabilidades.

El problema de todo esto que, para acceder a dichos archivos y editarlos, tendremos que solicitarlo a nuestra empresa de alojamiento web puesto que son ficheros muy delicados de la configuración del Apache, NGINX y demás…

Añadir cabeceras de respuesta HTTP seguras en WordPress

Puedes probar a agregar nuevas cabeceras insertando código en el functions.php. Si no te funciona, es que cuentas con un alojamiento muy restrictivo, y tendrás que comunicárselo a tu proveedor.


add_action('send_headers', function(){ 
    // Fuerza el uso de HTTPS
    header("Strict-Transport-Security: max-age=31536000; includeSubDomains");
    // Previene el Clickjacking
    header("X-Frame-Options: SAMEORIGIN");
    // Previene ataques por inyeccion de codigo
    header("Content-Security-Policy: default-src 'self';"); // FF 23+ Chrome 25+ Safari 7+ Opera 19+
    header("X-Content-Security-Policy: default-src 'self';"); // IE 10+
    // Bloquea el acceso si se sospecha de un ataque XSS
    header("X-XSS-Protection: 1; mode=block");
    // Previene problemas con el MIME-Type
    header("X-Content-Type-Options: nosniff");
    // Seguimiento
    header("Referrer-Policy: no-referrer-when-downgrade");
}, 1);

A continuación te explicaré a grandes rasgos, lo que hace cada una de estas cabeceras:

  • Strict-Transport-Security fuerza el uso de HTTPS. Es muy importante ya que protege de espías pasivos y de ataques MITM.
  • X-Frame-Options previene ataques clickjacking e impide que tu contenido no esté embebido en webs de terceros mediante los tags <frame>, <iframe> u <object>.
  • Content-Security-Policy indica al navegador de dónde debe cargar los recursos y si puede analizar/ejecutar estilos inline o Javascript. Esto es la mar de útil para prevenir ataques de inyección de código.
  • X-Content-Security-Policy es la versión de la cabecera anterior para IE 10 e IE 11. Para los demás navegadores modernos, debe utilizarse la cabecera Content-Security-Policy.
  • X-XSS-Protection define la configuración para los filtros de secuencias de comandos entre sitios, integrados en la mayoría de los navegadores. A priori puede parecerte poca cosa, pero mediante esta cabecera puedes indicarle al navegador que bloquee la respuesta si detecta que se ha introducido un script malicioso mediante algún input.
  • X-Content-Type-Options indica que en los navegadores donde se interpreta esta cabecera no se carguen hojas de estilo ni scripts cuyo MIME-type no sea el adecuado.
  • Referrer-Policy. Mediante este parámetro haremos que el navegador no realice un seguimiento cuando vayamos a visitar una web HTTP desde una HTTPS, aunque siempre se enviará cuando no sea así.

Y hasta aquí nuestro artículo sobre cómo añadir cabeceras de respuesta HTTP seguras en WordPress. Espero que te haya gustado y, si te ha resultado útil, no dudes en compartirlo en redes sociales. ¡Nos leemos!