ComunidadWP

¿Qué son las cabeceras de seguridad?

Cuando accedemos a un sitio web, el servidor contesta, además de con el contenido de la web, con una serie de cabeceras que son interpretadas por el navegador. Estas cabeceras son utilizadas por el servidor y por el navegador para el envío de información.

Esta información es de gran valor para un atacante, ya que estos mensajes de bienvenida del servidor web son la pista principal para conocer qué servicio es el que se ofrece, qué tecnología se está utilizando y ver los posibles errores al manipular peticiones. Podemos decir que sería una de las principales actividades que realizaría un atacante durante la fase de reconocimiento.

Algunas de las cabeceras que podemos habilitar en nuestro sitio son:

X-Frame-Options
El objetivo de establecer esta cabecera es proteger contra los ataques de clickjacking. Sirve para prevenir que la página pueda ser abierta en un iframe.

Los valores que puede tomar esta cabecera son:

  • DENY: prohíbe cualquier intento
  • SAMEORIGIN: permite usar el contenido sólo desde el propio dominio
  • ALLOW FROM: permite usar el contenido en las URLs indicadas

X-Content-Type-Options
El objetivo de establecer esta cabecera es evitar que se cargue un archivo JS ó CSS con un MIME-Type diferente al declarado. Es decir, si declaramos esa cabecera y establecemos el valor nosniff no se cargará por ejemplo un archivo CSS a menos que su MIME coincida con “text/css”.

Lo mismo para los archivos JS, se bloqueará la carga de estos archivos a menos que el MIME-Type coincida con:

  • «application/ecmascript»
  • «application/javascript»
  • «application/x-javascript»
  • «text/ecmascript»
  • «text/javascript»
  • «text/jscript»
  • «text/x-javascript»
  • «text/vbs»
  • «text/vbscript»

Esto es muy útil ya que permite bloquear archivos enmascarados que puedan ejecutar código malicioso en nuestro sitio.

X-XSS-Protection
El objetivo es habilitar o no el filtro anti XSS de los navegadores. Se trata de una capa adicional que bloquea ataques XSS a través del navegador y que ya implementan IE y Chrome.

Los valores que podemos establecer son:

X-XSS-Protection: 1; mode=block Activado
X-XSS-Protection: 0; mode=block Desactivado

Strict-Transport-Security
HTTP Strict Transport Security (HSTS) es un mecanismo de política de seguridad web según la cual un servidor web declara a los navegadores compatibles que deben interactuar con ellos solamente mediante conexiones HTTP seguras (TLS/SSL).

La vulnerabilidad más importante que la cabecera de seguridad HSTS puede prevenir es la extracción de SSL en ataques man-in-the-middle (ataque en el que se adquiere la capacidad de leer, insertar y modificar a voluntad, los mensajes entre dos partes sin que ninguna de ellas conozca que el enlace entre ellos ha sido violado).

Un ataque de extracción SSL convierte una conexión segura HTTPS en una conexión normal HTTP.

Content-Security-Policy
Content Security Policy (CSP) es un estándar de seguridad informático introducido para evitar cross-site scripting (XSS), clickjacking y otros ataques de inyección de código resultantes de la ejecución de contenido malicioso en el contexto de la página web.

Tiene un poco de miga ya que puedes definir el bloqueo a la carga de scripts, CSS e imágenes de dominios externos. Si utilizas un cdn debes tenerlo en cuenta y personalizar esta cabecera en función de tus necesidades. Incluso si cargas fuentes o maps de google, analíticas, banners o publicidad de terceros, etc…

Es decir, hay que crear listas blancas donde definir la fuente o el origen que permitimos para los scripts, estilos, imágenes, fuentes, frames, objetos (, o ), conexiones AJAX, elementos media (, ), formularios… En el ejemplo más abajo he puesto la cabecera por defecto para permitir estos elementos sólo de tu propio dominio. Aquí tienes un generador online para crear esta cabecera de seguridad de forma personalizada. Es soportada por la amplia mayoría de los navegadores web modernos.

Public-Key-Pins
HTTP Public Key Pins (HPKP) es un mecanismo de seguridad que permite a los sitios web con certificado HTTPS resistir la suplantación de certificados fraudulentos por parte de un atacante. Cuando se visita una web bajo SSL se produce una cadena de certificación que comprueba que el certificado de seguridad está asociado a ese dominio, que es válido, que está aprobado, etc. Un atacante podría alterar esa cadena con certificados fraudulentos. La cabecera de seguridad HPKP requiere una configuración avanzada.

¿Cómo añadir las cabeceras de seguridad HTTP a nuestro WordPress?

A pesar de que tan sólo añadiendo unas líneas a nuestro functions.php o .htaccess podemos incrementar la seguridad de nuestro sitio, es una opción que al parecer no se ocupa mucho.

Antes de implementar puedes comprobar si tu sitio usa este tipo de cabeceras a través de esta herramienta online: https://securityheaders.io/.

Añadir cabeceras de seguridad a través de functions.php

Simplemente añadimos estas líneas en nuestro functions.php:

function add_security_headers() {
    header( 'X-Content-Type-Options: nosniff' );
    header( 'X-Frame-Options: SAMEORIGIN' );
    header( 'X-XSS-Protection: 1;mode=block' );
    header( 'Strict-Transport-Security: max-age=10886400' );
    header( 'Content-Security-Policy: default-src self' );
}
add_action( 'send_headers', 'add_security_headers' );

Añadir cabeceras de seguridad a través de .htaccess

Simplemente añadimos estas líneas en nuestro .htaccess:

Header always append X-Frame-Options SAMEORIGIN
Header set X-Content-Type-Options nosniff
Header set X-XSS-Protection "1; mode=block"
Header set Strict-Transport-Security "max-age=10886400; includeSubDomains; preload"
Header set Content-Security-Policy "default-src 'self'"

La creciente comunidad de WP de Puebla les da la bienvenida a todos