Home Blogs Usando EdgeJS de Layer0 para configurar cabeceras de seguridad personalizadas
Applications

Usando EdgeJS de Layer0 para configurar cabeceras de seguridad personalizadas

About The Author

Outline

La implementación de cabeceras de seguridad se ha vuelto extremadamente importante ya que el número de infracciones y robos de datos están aumentando rápidamente cada día. Los encabezados de seguridad ofrecen una parte fácil de implementar de la solución: Simplemente pase encabezados HTTP específicos para proteger su sitio web de ataques comunes como XSS, inyección de código, clickjacking, etc.

¿Qué son los encabezados de seguridad?

Las aplicaciones web pueden enviar comandos especiales al navegador para proteger los sitios web de infracciones o vulnerabilidades del lado del cliente, conocidas como cabeceras de seguridad.

Cuando un usuario visita un sitio web en su navegador, el servidor responde con encabezados de respuesta HTTP. Estos encabezados, compuestos de metadatos, comparten información con el cliente y el servidor. Esta información compartida define cómo los navegadores deben interactuar con el sitio web. Los encabezados de seguridad proporcionan una protección potente contra varias vulnerabilidades y amenazas de aplicaciones web.

Este blog desglosa los siguientes encabezados de seguridad importantes:

  • Política de seguridad de contenido (CSP)
  • X-Contenido-Tipo-Opciones
  • Opciones de X-Frame
  • Política de recursos de origen cruzado (CORP)
  • Política de Embedder de Origen Cruzado (COEP)
  • Política de apertura de origen cruzado (COOP)
  • Política de referencia
  • Política de permisos
  • Seguridad estricta del transporte HTTP (HSTS)

Importancia de los encabezados de seguridad

Los encabezados de seguridad HTTP son una parte fundamental de la seguridad de los sitios web; sin embargo, solo el 1,6% de los más de un millón de sitios web han implementado la Política de Seguridad de Contenido (CSP) y solo un .2% de los sitios implementan CSP-Report-only.

Impactante, ¿verdad?! La falta de CSP HTTP Header elimina los mecanismos de defensa contra Cross-Site Scripting (XSS) y otros ataques de inyección del lado del cliente. La violación de datos de British Airways es uno de los incidentes que ilustra cómo debido a la falta de seguridad del lado del cliente, los nombres, direcciones de calle, direcciones de correo electrónico, números de tarjetas de crédito, etc. se expusieron las fechas de caducidad y los códigos de seguridad de la tarjeta de 380.000 clientes, que permanecieron sin ser detectados durante 15 días.

Agregar seguridad con EdgeJS de Layer0

Con la plataforma de implementación de Layer0, cosas como TLS se configuran automáticamente para cada enlace de implementación, por lo que los desarrolladores pueden enviar de forma segura de forma predeterminada. En este blog, observamos de cerca los encabezados de seguridad importantes y un ejemplo para mostrar lo rápido que puede proteger un sitio web con configuración de rutas en Layer0.

Empezando con los encabezados de seguridad con Edgio

Política de seguridad de contenido (CSP)

Cómo CSP previene la carga de recursos desde orígenes no permitidos

Content-Security-Policy proporciona una capa añadida para evitar ataques de scripts entre sitios (XSS) restringiendo scripts, estilos, imágenes, fuentes y medios que se carguen (y ejecuten) desde orígenes permitidos específicos. Independientemente de la seguridad de su backend, si los actores defectuosos pueden atacar el código que se ejecuta en el navegador en lugar de en el servidor, los datos de sesión del usuario se ven comprometidos y la información confidencial se expone. Uno de los muchos ejemplos (como la violación de datos de British Airways) es el ataque MageCart en el módulo de pago de Ticketmaster. La violación de Ticketmaster resultó en 40.000 víctimas de robo de tarjetas de crédito y permaneció activo durante 5 meses antes de ser atrapado! Todo simplemente inyectando un script de skimming de forma dentro del navegador.

Const { Router) = require(‘@layer0/core/router’) const ContentSecurityPolicy = `Default-src ‘self’; script-src ‘self»unsafe-eval»unsafe-inline’ *.layer0.co; style-src ‘self»unsafe-inline’ *.googleapis.com .gstatic.com; img-src * blob: Data: ‘Media; ‘src; ‘none; ‘src; ‘src;’; ‘src-src; ‘src;’; ‘self; New Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«Content-Security-Policy», ContentSecurityPolicy.replace(/\n/g, «»))))

Content-Security-Policy le da la capacidad de:

  1. Superar los ataques XSS (Cross Site Scripting)
  2. Evite Clickjacking
  3. Informe de la violación (s) a las reglas de CSP

X-Contenido-Tipo-Opciones

Cómo configurar X-Content-Type-Options previene la detección de tipo MIME

El encabezado X-Content-Type-Options indica que los tipos MIME (Extensiones de correo de Internet multipropósito, un identificador para formatos de archivo) especificados en los encabezados Content-Type deben seguirse estrictamente. Con MIME Type Sniffing, operaciones como la carga de imágenes pueden ejecutar ejecutables que podrían ser maliciosos, donde el encabezado X-Content-Type-Options entra en juego.

Const { Router ] = require(‘@layer0/core/router’) new Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«X-Content-Type-Options», «nosniff»)

Opciones de X-Frame

X-Frame-Options Header

El encabezado X-Frame-Options indica si se debe permitir que un navegador renderice una página en una etiqueta de marco, iframe, embed u objeto para evitar ataques de click-jacking . Ya sea SET TO NEGRY o SAMEORIGIN garantiza que su contenido no esté incrustado en otros sitios o solo incrustado en sitios con el mismo origen, respectivamente.

Const { Router ] = require(‘@layer0/core/router’) new Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«Opciones de marco X», «SAMEORIGIN»)

X-Frame-Options le da la capacidad de:

  1. Evita los ataques de Clickjacking
  2. Indique si se debe permitir o no que un navegador renderice una página en A <marco>, <el iframe>, <incrustar> o <objeto>

Política de recursos de origen cruzado (CORP)

CORP permite a los servidores proteger contra ciertas incrustaciones de origen cruzado o entre sitios del recurso solicitado (por ejemplo, respuestas de API). También previene ataques especulativos de canal lateral como Spectre.

Const { Router ] = require(‘@layer0/core/router’) new Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«Cross-Origin-Resource-Policy», «same-origin»)

La política de recursos de origen cruzado es un encabezado de respuesta de opt-in que puede proteger cualquier recurso; no hay necesidad de que los navegadores olfateen los tipos de MIME. — MDN Docs

Política de Embedder de Origen Cruzado (COEP)

El encabezado COEP evita la carga de recursos de origen cruzado para los que no se ha concedido permiso (a través de CORS o CORP). Utilice ‘require-corp’ para hacer cumplir el encabezado, mientras que ‘unsafe-none’ para permitir la obtención de documentos de origen cruzado.

Const { Router ] = require(‘@layer0/core/router’) new Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«Cross-Origin-Embedder-Policy», «require-corp»))

Política de apertura de origen cruzado (COOP)

La aplicación del encabezado COOP garantiza que el grupo de contexto de navegación de un documento de nivel superior no se comparta entre documentos de origen cruzado. Mientras que ‘same-origin’ rompe las integraciones que requieren interacciones de ventanas de origen cruzado como OAuth y Payment, ‘same-origin-allow-popups’ tiene como objetivo compartir el contexto con solo los popups de SAMEORIGIN.

Const { Router ] = require(‘@layer0/core/router’) new Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«Cross-Origin-Opener-Policy», «same-origin-allow-popups»))

Política de referencia

Cuando un usuario navega (haciendo clic en un enlace) de un sitio (el origen) a otro (el destino), este último recibe información sobre el origen del usuario. El encabezado de Política de referencia controla la cantidad de esta información que estará disponible para el destino. Para todas las directivas de Referrer-Policy, consulte Referrer-Policy — HTTP | MDN (mozilla.org).

Const { Router ] = require(«@layer0/core/router») module.exports= new Router() .get(«/», ({ setResponseHeader) => { setResponseHeader(«Referrer-Policy», «origin-when-cross-origin»))

Política de permisos

Un encabezado HTTP experimental que proporciona la capacidad de permitir / denegar características del navegador en sus propios marcos, y en cualquier iframe en el documento. Para todas las directivas de Referrer-Policy, consulte Feature-Policy — HTTP | MDN (mozilla.org)

Const { Router} = require(«@layer0/core/router») module.exports= new Router() .get(«/», ({ setResponseHeader) => { setResponseHeader( «Permissions-Policy», «camera=(), micrófono=(), geolocalización=() );

Seguridad estricta del transporte HTTP (HSTS)

HSTS Strict Transport Security Header

HTTP Strict-Transport-Security (HSTS) informa a los navegadores para cargar el sitio web solo usando HTTPS, en lugar de usar el protocolo HTTP.

Const { Router ] = require(‘@layer0/core/router’) new Router() .get(«/:route», ({ setResponseHeader) => { setResponseHeader(«Strict-Transport-Security», «max-age=31536000; includeSubDomains»))

HSTS le da la capacidad de:

  1. Proteger contra ataques de degradado HTTP (ataques de eliminación de SSL)
  2. La defensa de contenido mixto cambia a HTTPS por defecto

Un ejemplo

Con Layer0, es más fácil que nunca implementar cabeceras de seguridad. Al usar EdgeJS de Layer0, puede agregar encabezados de seguridad a cualquier sitio web, independientemente del marco que se utilice. Lo siguiente busca implementar los encabezados de seguridad relevantes en un sitio web construido con Sapper a través de Layer0.

Ejemplo: https://rishi-raj-jain-security-headers-example-default.layer0-limelight.link
GitHub: rishi-raj-jain/security-headers-example
Informe: Enlace de informe de encabezados de seguridad

Debate

¡Adelante y agrega encabezados de seguridad relevantes para proteger tu aplicación web! Con Layer0 puede hacer aún más que esto, secretos, envenenamiento de caché y habilitar la autenticación básica en Edgio Documentation — Security.