Cifrado y comunicación segura

Encabezado de seguridad

Lectura de aproximadamente 5 minutos

Qué son los encabezados de seguridad

Los encabezados de seguridad (Security Headers) son encabezados que el servidor web añade a la respuesta HTTP para instruir al navegador sobre el comportamiento de seguridad. Al configurarlos adecuadamente, se pueden defender contra ataques como XSS, clickjacking y MIME sniffing.

Los encabezados de seguridad se pueden implementar solo con la configuración del servidor, y en muchos casos no requieren cambios en el código de la aplicación, por lo que son una medida de seguridad con alta relación coste-efectividad. Combinados con HTTPS, mejoran significativamente la capacidad defensiva del sitio web.

Principales encabezados de seguridad

  • Content-Security-Policy (CSP): Restringe las fuentes de recursos (scripts, estilos, imágenes, fuentes, etc.) que se pueden cargar en la página. Al prohibir la ejecución de scripts en línea, se pueden mitigar significativamente los ataques XSS. Es el más potente pero la configuración es compleja y requiere pruebas cuidadosas para la implementación en sitios existentes.
  • Strict-Transport-Security (HSTS): Instruye al navegador a realizar siempre los accesos posteriores por HTTPS. Elimina el riesgo de ataques de intermediario que ocurren durante la redirección de HTTP a HTTPS. max-age=31536000; includeSubDomains es la configuración recomendada.
  • X-Content-Type-Options: Al configurar nosniff, se previene que el navegador ignore el Content-Type y adivine el tipo de archivo (MIME sniffing). La configuración es de una sola línea y prácticamente no tiene efectos secundarios, por lo que debe configurarse en todos los sitios.
  • X-Frame-Options: Restringe que la página se incruste dentro de un <iframe>, previniendo ataques de clickjacking. Se configura DENY (rechazo total) o SAMEORIGIN (solo permitir el mismo origen). Se puede sustituir por la directiva frame-ancestors de CSP.
  • Referrer-Policy: Controla la información de referencia enviada al hacer clic en un enlace a otro sitio. Se recomienda strict-origin-when-cross-origin. Si la URL contiene IDs de sesión o tokens, reduce el riesgo de filtración a través del referrer.
  • Permissions-Policy: Controla el acceso a APIs del navegador como cámara, micrófono, ubicación y sensor de aceleración. Al desactivar explícitamente las funciones no utilizadas, se reduce la superficie de ataque.

Métodos de configuración de los encabezados de seguridad

Los encabezados de seguridad se añaden en la configuración del servidor web o proxy inverso.

Ejemplo de configuración en Nginx

add_header X-Content-Type-Options "nosniff" always;
add_header X-Frame-Options "DENY" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;

Configuración en CloudFront

En AWS CloudFront se pueden configurar los encabezados de seguridad de forma masiva utilizando políticas de encabezados de respuesta. Con solo aplicar la política gestionada "SecurityHeadersPolicy", los principales encabezados de seguridad se añaden automáticamente.

Verificación de la configuración

Después de la configuración, verifique con los siguientes métodos.

  • securityheaders.com: Herramienta gratuita que puntúa la configuración de los encabezados de seguridad de A+ a F con solo introducir la URL.
  • Herramientas de desarrollo del navegador: Verificar directamente los encabezados de respuesta en la pestaña Network.
  • Comando curl: Obtener los encabezados de respuesta con curl -I https://example.com.

Consideraciones para la implementación y orden de prioridad

No es necesario implementar todos los encabezados a la vez. Se recomienda implementarlos gradualmente en el siguiente orden de prioridad.

  1. Implementar inmediatamente (pocos efectos secundarios): X-Content-Type-Options, X-Frame-Options, Referrer-Policy
  2. Implementar pronto (requiere HTTPS): HSTS (primero probar con un max-age corto y extender si no hay problemas)
  3. Implementar con cuidado (requiere pruebas): CSP (primero verificar el impacto en modo Report-Only antes de aplicar)

CSP tiene el mayor efecto pero también el riesgo de romper la funcionalidad del sitio por errores de configuración. Utilizando el encabezado Content-Security-Policy-Report-Only, se pueden recopilar solo informes de violaciones sin bloquear realmente, lo que es útil para pruebas antes de la aplicación en producción.

Los encabezados CORS a menudo se confunden con los encabezados de seguridad, pero CORS es el control del intercambio de recursos entre orígenes y tiene un propósito diferente a la defensa contra ataques.

Conceptos erróneos comunes

Si uso HTTPS, los encabezados de seguridad no son necesarios
HTTPS proporciona cifrado de la vía de comunicación, pero no puede prevenir ataques de capa de aplicación como XSS o clickjacking. Los encabezados de seguridad son una defensa de una capa diferente a HTTPS, y es necesario usarlos en combinación.
Si configuro los encabezados de seguridad, la visualización se rompe
X-Content-Type-Options y X-Frame-Options prácticamente no tienen efectos secundarios. Lo que puede afectar la visualización es principalmente CSP, pero se puede implementar de forma segura con pruebas previas en modo Report-Only.

Términos relacionados

Artículos relacionados