Configuración de encabezados de seguridad HTTP en WordPress

Publicado: 2022-02-23

La mayoría de los navegadores modernos admiten una variedad de encabezados de seguridad HTTP para mejorar la seguridad de su sitio web de WordPress, proteger mejor a sus visitantes de clases de ataques de navegador como secuestro de clics, secuencias de comandos entre sitios y otros ataques comunes, e incluso mejorar la privacidad de los visitantes de su sitio. en línea.

Este artículo brinda una descripción general de qué son estos encabezados de seguridad HTTP, explica cómo funcionan y cuál es su alcance. También explica cómo puede agregar estos encabezados de seguridad HTTP a su sitio web para mejorar la seguridad de su sitio web de WordPress.

¿Qué es un encabezado de seguridad HTTP de todos modos?

Los encabezados de seguridad HTTP son una serie de encabezados HTTP 1 intercambiados entre un cliente web (navegador) y un servidor web que se utilizan para especificar la configuración relacionada con la seguridad de la comunicación HTTP entre un cliente web y un servidor. Habilitar los encabezados de seguridad en su sitio web de WordPress puede mejorar la resiliencia de su sitio web contra los ataques comunes, incluidos los scripts de sitios cruzados (XSS) y el secuestro de clics.

Cómo los encabezados de seguridad HTTP pueden mejorar la seguridad de WordPress

Los encabezados de seguridad HTTP pueden ayudar a mejorar la seguridad de su sitio web de WordPress al indicarle al navegador que habilite una variedad de funciones de seguridad en consecuencia. En muchos casos, implementar los encabezados correctos es un asunto complicado e incluso puede tener resultados diferentes (o ser totalmente ineficaz) en navegadores más antiguos, por lo que es una buena práctica probar cualquier cambio en un entorno de prueba o ensayo antes de aplicar cualquier cambio en un sitio de WordPress en vivo.

Los encabezados de seguridad HTTP más utilizados

¿Qué encabezados hacen qué? Profundicemos en una descripción general de algunos de los encabezados de seguridad HTTP más importantes y más utilizados.

Estricta-Transporte-Seguridad

El encabezado HTTP Strict-Transport-Security indica al navegador que aplique HTTP Strict Transport Security (HSTS) 2 . Un encabezado HSTS indica al navegador visitante que acceda siempre al sitio a través de HTTPS (en lugar de HTTP), incluso si el usuario (o un atacante que intenta ejecutar un ataque Man-in-the-Middle) intenta acceder al sitio a través de HTTP, el el navegador cambiará a la fuerza a HTTPS, incluso si HTTP no está disponible; hasta tal punto, solo debe habilitar HSTS si tiene HTTPS habilitado y funciona correctamente sin problemas de contenido mixto 3 .

El siguiente encabezado de respuesta HTTP HTTP Strict Transport Security (HSTS) habilita HSTS durante 1 año (31536000 segundos).


Strict-Transport-Security: max-age=31536000

Política de seguridad de contenido

El encabezado de seguridad HTTP Content-Security-Policy es un encabezado HTTP con mucha potencia y capacidad de configuración. Configura la Política de seguridad de contenido (CSP) del navegador, que es un conjunto de funciones de seguridad que se encuentran en los navegadores modernos y que proporciona una capa adicional de seguridad que ayuda a detectar y mitigar ataques como Cross-Site Scripting (XSS) y ataques de inyección de datos.

La política de seguridad de contenido (CSP) también es notoriamente difícil de acertar, ya que la configuración correcta de CSP dependerá en gran medida del sitio web en cuestión, y debe probarse exhaustivamente antes de la implementación; tanto es así, tiene una política hermana de seguridad de contenido. -Informe-Solo 4 Encabezado HTTP usado solo para probar CSP.

El siguiente es un ejemplo de una política de seguridad de contenido (CSP) bastante simple que solo permite cargar activos desde el origen desde el que se sirve el sitio web.


Content-Security-Policy: default-src 'self'

Sin embargo, la política de seguridad de contenido (CSP) es mucho más configurable que lo que se muestra en este ejemplo simple. CSP incluye otras directivas como script-src , style-src e img-src para especificar las fuentes de las que el navegador puede cargar activos (por ejemplo, CSS, imágenes y fuentes). Para obtener una lista completa de cómo se puede configurar CSP, consulte las pautas de referencia rápida de la política de seguridad de contenido.

Opciones de tipo de contenido X

El encabezado de seguridad HTTP X-Content-Type-Options es un encabezado no estándar respetado por todos los principales navegadores que evita los ataques de Cross-site Scripting (XSS) que se producen como resultado de la detección de tipo MIME 5 . Cuando está presente, este encabezado le dice al navegador que siga estrictamente los tipos MIME definidos en el encabezado HTTP Content-Type, y que el navegador no debe intentar detectar el tipo MIME correcto para los datos de respuesta en sí. El encabezado tiene una sola directiva: nosniff.


X-Content-Type-Options: nosniff

Encabezados de seguridad HTTP antiguos o sin usar

También hay varios encabezados de seguridad HTTP antiguos y sin usar. Ya no se usan o ya no funcionan porque se introdujeron como arreglos temporales, experimentos o incluso iniciativas no estándar que desde entonces han quedado en desuso o se han reemplazado por completo. A continuación se muestra una lista de estos encabezados de seguridad HTTP.

Encabezados de seguridad HTTP reemplazados por Content-Security-Policy

Opciones de marco X

El encabezado de seguridad HTTP X-Frame-Options es un encabezado ahora obsoleto que fue introducido por primera vez por Microsoft Internet Explorer (y adoptado por otros navegadores con diversos grados de uniformidad y compatibilidad) para proteger los navegadores contra Cross-site Scripting (XSS), Clickjacking y otros ataques que dependen de que un sitio web se coloque dentro de un iframe.

Este encabezado ahora ha sido reemplazado por la directiva de política de seguridad de contenido (CSP) de antecesores de marco. Se recomienda utilizar CSP con la directiva frame-ancestors en lugar de X-Frame-Options.

Protección X-XSS

El encabezado de seguridad HTTP X-XSS-Protection era un encabezado no estándar introducido para habilitar o deshabilitar las protecciones del navegador contra ataques de Cross-site Scripting (XSS). En la práctica, este encabezado fue frecuentemente fácil de eludir para los atacantes y, como resultado, la mayoría de los navegadores modernos lo ignoran.

Pines de clave pública

El encabezado de seguridad HTTP Public-Key-Pins se usa para configurar la función de seguridad Public Key Pinning (HPKP) que se introdujo en Google Chrome y Firefox para evitar la suplantación de certificados TLS. HPKP funcionaba haciendo que el servidor web proporcionara al navegador un conjunto de hashes criptográficos de las claves públicas del certificado TLS que usaba el sitio web, que el navegador a su vez usaría para comparar con los certificados que recibe del servidor en solicitudes posteriores. El problema era que HPKP era bastante complicado de administrar y, con frecuencia, generaba configuraciones incorrectas que podían deshabilitar por completo el acceso al sitio web; por lo tanto, ya no se recomienda su uso.

Agregar encabezados de seguridad HTTP en WordPress

Los encabezados de seguridad HTTP funcionan mejor cuando están configurados en su servidor web o, cuando corresponda, su Red de entrega de contenido (CDN) o Firewall de aplicaciones web. Esto permite que se envíen en cada solicitud. Alternativamente, aunque menos ideal, puede usar un complemento de WordPress para configurar estos encabezados por usted.

Ahora que hemos cubierto el propósito de los encabezados de seguridad HTTP, aquí hay algunas formas en que se pueden habilitar en su sitio web de WordPress.

Agregar encabezados de seguridad HTTP en WordPress usando Apache HTTP Server

El siguiente es un ejemplo de la configuración para Apache HTTP Server requerida para habilitar HTTP Strict Transport Security (HSTS), X-Content-Type-Options y una política de seguridad de contenido simple.


<ifModule mod_headers.c>
Header set Strict-Transport-Security "max-age=31536000"
Header set X-Content-Type-Options "nosniff"
Header set Content-Security-Policy "default-src 'self'"
</ifModule>

Agregar encabezados de seguridad HTTP en WordPress usando Nginx

De manera similar, el siguiente es un ejemplo de la configuración de Nginx requerida para habilitar la seguridad de transporte estricta de HTTP (HSTS), X-Content-Type-Options y una política de seguridad de contenido simple.


server {
add_header Strict-Transport-Security "max-age=31536000; always;
add_header X-Content-Type-Options "nosniff" always;
add_header Content-Security-Policy "default-src 'self'" always;
}

Agregar encabezados de seguridad HTTP en WordPress usando un complemento

Alternativamente, aunque es menos efectivo (ya que depende de WordPress para modificar los encabezados), usar un complemento de WordPress podría ser la forma más fácil de agregar encabezados de seguridad HTTP a su sitio web de WordPress. Los complementos como el complemento de redirección le permiten agregar encabezados HTTP personalizados a su sitio web.

Cómo verificar los encabezados de seguridad HTTP para un sitio web

Una vez que agregue encabezados de seguridad HTTP en su sitio web de WordPress, querrá asegurarse de que estén configurados correctamente y funcionen como espera. La forma más fácil de probar esto es usando una herramienta gratuita llamada Security Headers 6 .

Usar la herramienta Encabezados de seguridad es tan simple como ingresar la URL de su sitio web y presionar "Escanear". A continuación, recibirá una calificación de A+ a F junto con una explicación de cómo se ha determinado esa calificación.

Referencias utilizadas en este artículo [ + ]

Referencias utilizadas en este artículo
1 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers
2 https://owasp.org/www-project-secure-headers/#http-strict-transport-security
3 https://web.dev/que-es-contenido-mixto/
4 https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy-Report-Only
5 https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#mime_sniffing
6 https://securityheaders.com/