jjrblik

Cabeceras de seguridad: Protegiendo tu sitio web de amenazas

En el mundo digital actual, la seguridad es una preocupación primordial para cualquier propietario de sitio web. Los ciberdelincuentes están constantemente buscando vulnerabilidades para explotar y comprometer sitios web con fines maliciosos. Es por eso que implementar cabeceras de seguridad adecuadas es esencial para proteger tu sitio y garantizar la seguridad de tus usuarios. En este artículo, exploraremos qué son las cabeceras de seguridad, por qué son importantes y cómo puedes utilizarlas para fortalecer la defensa de tu sitio web.

¿Qué son las cabeceras de seguridad?

Las cabeceras de seguridad son fragmentos de código HTTP (Protocolo de Transferencia de Hipertexto) que tu servidor web envía al navegador del usuario. Estas cabeceras contienen instrucciones y políticas que ayudan a mitigar los riesgos de seguridad y proteger tu sitio web contra diferentes amenazas cibernéticas.

Su importancia en la seguridad

El indice de instalaciones de un sistema es directamente proporcional al porcentaje de ataques que recibe. WordPress, al tener una cuota de mercado del 63% tiene la fama de ser el sistema más atacado.  Eso es al ser el que está presente en más sistemas. 

Instalaciones de WordPress
63,1%
Instalaciones de Shopify
6,5%
Instalaciones de Wix
2,9%
Instalaciones de Joomla
2,7%
Instalaciones de Drupal
2%
Fuente: W3Techs.com
Las cabeceras son uno  de las primeras torres de defensa en la seguridad de tu web. Bien configuradas pueden ayudarte a proteger tu proyecto de diversas amenazas:

1. Protección contra ataques de inyección

Uno de los riesgos más comunes que enfrentan los sitios web es el ataque de inyección, como el SQL Injection o el Cross-Site Scripting (XSS). Mediante la configuración adecuada de cabeceras de seguridad, puedes reducir significativamente la posibilidad de que los atacantes exploten estas vulnerabilidades y comprometan tu sitio web.

2. Mitigación de ataques de fuerza bruta

Los ataques de fuerza bruta son intentos repetitivos y automatizados de adivinar contraseñas o nombres de usuario para obtener acceso no autorizado a tu sitio. Al utilizar cabeceras de seguridad, puedes limitar la frecuencia de las solicitudes, lo que dificulta que los atacantes lleven a cabo estos ataques.

3. Prevención de ataques de suplantación de identidad

El phishing y el spoofing son técnicas comunes utilizadas por los ciberdelincuentes para engañar a los usuarios y obtener información confidencial. Mediante la implementación de cabeceras de seguridad, puedes evitar que tu sitio web sea utilizado como medio para realizar estas actividades maliciosas.

4. Protección de datos sensibles

Si tu sitio web maneja datos sensibles, como información de tarjetas de crédito o datos personales, es crucial protegerlos adecuadamente. Las cabeceras de seguridad te permiten aplicar políticas que evitan que estos datos se filtren o sean accesibles para terceros no autorizados.

Principales cabeceras y sus funciones

1. Content-Security-Policy (CSP)

				
					Header set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval' ;  style-src 'self'  'unsafe-inline';  img-src 'self'; font-src 'self' data: https://www.google.com;form-action 'self';  object-src 'self'; base-uri 'self'; "
				
			

La cabecera CSP es una de las más importantes, ya que te permite especificar desde qué fuentes se pueden cargar determinados tipos de contenido, como scripts, estilos, imágenes y más. Al limitar las fuentes permitidas, puedes evitar la ejecución de scripts maliciosos y proteger a tus usuarios de ataques de XSS.

Esta cabecera permite configurar una política de seguridad que define desde dónde se pueden cargar los diferentes recursos de tu página (scripts, estilos, imágenes, etc.). En el ejemplo, hemos definido una política básica que solo permite cargar recursos desde el mismo dominio ('self') y permite el uso de ‘unsafe-inline’ y ‘unsafe-eval’ para scripts y estilos. Sin embargo, es mejor evitar el uso de ‘unsafe-inline’ y ‘unsafe-eval’ siempre que sea posible, ya que pueden introducir riesgos de seguridad.

default-src ‘self’;: Establece la fuente predeterminada para todos los tipos de recursos. En este caso, solo se permite cargar recursos desde el mismo origen (el dominio actual).

script-src ‘self’ ‘unsafe-inline’ ‘unsafe-eval’;: Define las fuentes permitidas para los scripts. 'self' permite scripts desde el mismo origen, 'unsafe-inline' permite scripts incrustados en línea en las etiquetas HTML, y 'unsafe-eval' permite la ejecución de código evaluado dinámicamente (aunque esto es riesgoso y se recomienda evitarlo).

style-src ‘self’ ‘unsafe-inline’;: Especifica las fuentes permitidas para los estilos. 'self' permite estilos desde el mismo origen, y 'unsafe-inline' permite estilos incrustados en línea en las etiquetas HTML.

img-src ‘self’;: Define las fuentes permitidas para las imágenes. 'self' permite cargar imágenes desde el mismo origen.

font-src ‘self’ data: https://www.google.com;: Indica las fuentes permitidas para las fuentes. 'self' permite cargar fuentes desde el mismo origen, data: permite cargar fuentes incrustadas en base64, y https://www.google.com permite cargar fuentes desde ese dominio específico.

form-action 'self';: Especifica las ubicaciones permitidas para enviar formularios. 'self' permite enviar formularios al mismo origen.

object-src ‘self’;: Define las fuentes permitidas para objetos incrustados, como Flash o contenido embebido.

base-uri ‘self’;: Establece el origen permitido para las URLs base.

2. Strict-Transport-Security (STS)

				
					Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
				
			

El propósito principal del encabezado STS es asegurarse de que las comunicaciones se realicen a través de HTTPS (SSL/TLS) en lugar de HTTP no cifrado.

Desglosemos los elementos de esta cabecera:

max-age=31536000: Esto establece el tiempo, en segundos, durante el cual el navegador debe recordar que el sitio debe ser accesible solo a través de HTTPS. En este caso, el valor es de 31,536,000 segundos, lo que equivale a un año.

includeSubDomains: Indica que la política STS también debe aplicarse a todos los subdominios del dominio actual. Esto garantiza que los subdominios también sean accesibles solo a través de HTTPS.

preload: Esta directiva indica que el sitio web desea ser considerado para la inclusión en la lista de pre-carga HSTS en los navegadores. La pre-carga HSTS es un mecanismo mediante el cual los navegadores ya saben que un sitio debe ser accedido solo a través de HTTPS incluso antes de visitar el sitio por primera vez.

3. X-Frame-Options "SAMEORIGIN"

				
					Header always set X-Frame-Options "SAMEORIGIN"

				
			

La cabecera «X-Frame-Options» es otra directiva de seguridad HTTP que se utiliza para prevenir ataques de «Clickjacking», que ocurren cuando un atacante engaña a un usuario para que haga clic en algo diferente a lo que el usuario cree que está haciendo. Al configurar esta cabecera, puedes controlar si tu sitio web puede ser incrustado en un marco (frame) por otro sitio web. El valor «SAMEORIGIN» en esta cabecera especifica que el contenido solo puede ser incrustado en un marco si proviene del mismo origen (dominio) que el sitio web.

4. Permissions-Policy (PP)

				
					Header set Permissions-Policy "geolocation=(self), camera=(), microphone=(), fullscreen=(self), payment=(self)"
				
			

La cabecera «Permissions-Policy» es una directiva de seguridad HTTP que te permite controlar qué características y recursos del navegador están disponibles para tu sitio web y cómo se pueden utilizar. A través de esta cabecera, puedes especificar políticas para funciones como geolocalización, acceso a la cámara, acceso al micrófono, activación del modo de pantalla completa y más.

geolocation=(self): Permite el acceso a la geolocalización solo si proviene del mismo origen (dominio).

camera=(): Niega el acceso a la cámara, lo que significa que tu sitio web no puede acceder a la cámara del dispositivo del usuario.

microphone=(): Niega el acceso al micrófono, lo que significa que tu sitio web no puede acceder al micrófono del dispositivo del usuario.

fullscreen=(self): Permite que el sitio active el modo de pantalla completa solo si proviene del mismo origen (dominio).

payment=(self): Permite el acceso a funciones relacionadas con pagos solo si proviene del mismo origen (dominio).

5. Refferer-Policy (RP)

				
					Header set Referrer-Policy "strict-origin-when-cross-origin"
				
			

La cabecera «Referrer-Policy» es otra directiva de seguridad HTTP que te permite controlar cómo se comparte la información del encabezado «Referer» cuando un usuario hace clic en un enlace que lleva desde tu sitio web a otro sitio. El encabezado «Referer» contiene la URL de la página de origen desde la cual se originó la solicitud.

strict-origin-when-cross-origin: Esta política es muy segura y protege la privacidad del usuario. Cuando un usuario navega desde una página a otra en tu mismo sitio (misma origen), el encabezado «Referer» se enviará. Sin embargo, cuando un usuario navega desde tu sitio a otro sitio (diferente origen), el encabezado «Referer» solo se enviará si la navegación es a través de una solicitud GET.

Cómo implementar estas cabeceras

Implementar cabeceras de seguridad no tiene por qué ser complicado. Puedes configurar estas cabeceras en el archivo de configuración de tu servidor web  con los códigos facilitados en este artículo o a través de directivas en el código de tu sitio usando sus variantes en HTML. También existen herramientas on line que te ayudarán a generar las cabeceras adecuadas para tu sitio web, según tus necesidades específicas de seguridad.

Es importante mencionar que la configuración de las cabeceras de seguridad puede variar según el servidor web que estés utilizando y la tecnología de tu sitio. Por lo tanto, es recomendable consultar la documentación oficial de tu servidor web o buscar asesoramiento de expertos en seguridad para garantizar una configuración adecuada y efectiva.

Si quieres asegurarte que las cabeceras están bien implementadas puedes hacerlo a través de https://securityheaders.com/.

Conclusiones

Las cabeceras de seguridad son una medida fundamental para proteger tu sitio web contra diversas amenazas cibernéticas y salvaguardar la información de tus usuarios. Al implementar adecuadamente las cabeceras mencionadas y otras que sean pertinentes para tu caso específico, estarás fortaleciendo la defensa de tu sitio y generando un entorno más seguro para tus visitantes. Recuerda que la seguridad en línea es un proceso continuo y que mantener tus cabeceras de seguridad actualizadas y bien configuradas es esencial para hacer frente a las amenazas en constante evolución en el panorama digital actual.

Índice de contenidos

Scroll al inicio