No puedo acceder a mi servidor para habilitar los encabezados COOP y COEP, pero pude agregarlos a través del trabajador de servicio usando el siguiente script https://github.com/gzuidhof/coi-serviceworker , que registra un trabajador de servicio que tiene los encabezados activos.
Necesito COOP y COEP para habilitar SharedArrayBuffer , que está restringido para evitar la vulnerabilidad de Spectre y Meltdown.
Mi pregunta es si agregar los encabezados https a través del trabajador del servicio representa un riesgo de seguridad, porque los encabezados no están configurados en el nivel del servidor.
Al final de este artículo, argumenta que esto no es un riesgo, https://dev.to/stefnotch/enabling-coop-coep-without-touching-the-server-2d3n
Pero agradecería una explicación para comprender mejor si el enfoque del trabajador del servicio es equivalentemente seguro o si deja vulnerabilidades abiertas.
¡Gracias!
Agregar esos encabezados a través de un trabajador de servicio es equivalente desde una perspectiva de seguridad y habilitará una funcionalidad equivalente. Sin embargo, hay algunas cosas a tener en cuenta:
Un trabajador del servicio no puede controlar una página de cliente durante la primera vez que un usuario navega a un sitio o después de una recarga de turno. Establecer estos encabezados a través del servidor web real es la única forma de garantizar que se aplicarán a esos escenarios. En términos generales, debe tener cuidado de degradar correctamente si hay funciones en su aplicación web principal que dependen de la presencia de un trabajador de servicio.
Hay una ligera sobrecarga involucrada en tener un trabajador de servicio controlando una página. Si estuviera respondiendo a las solicitudes yendo directamente a un caché local en lugar de a la red, eso normalmente superaría la sobrecarga. Dado que no parece que planee realizar ningún almacenamiento en caché en su trabajador de servicio, debe detectar funciones para las precargas de navegación y habilitarlas si es compatible. Esto mitigará el impacto potencial en el rendimiento.
Los encabezados solo deben configurarse en respuestas que pueden crear un cliente, como respuestas para documentos o trabajadores. Recomiendo verificar con su trabajador de servicio si el destino de la solicitud es o no para una de esas cosas antes de llamar a event.respondWith() . Esto ayudará a que su controlador de fetch funcione bien con cualquier otro controlador de fetch que también pueda estar registrado y que, por ejemplo, responda a solicitudes de subrecursos utilizando una estrategia de almacenamiento en caché. Algo como lo siguiente debería funcionar:
self.addEventListener("fetch", (event) => { if (!["document", "iframe", "worker"].includes(event.request.destination)) { return; } event.respondWith(/* your logic here */); });