crossorigin javascript html cryptography cors subresource-integrity

javascript - crossorigin - integrity hash



Especificar el hash de un script desde un host no confiable (2)

Esta característica fue propuesta por el W3C como Subresource Integrity . A partir de diciembre de 2015, Chrome 44 y Firefox 43 han implementado esta recomendación.

EJEMPLO 1

<link rel="stylesheet" href="https://site53.example.net/style.css" integrity="sha256-vjnUh7+rXHH2lg/5vDY8032ftNVCIEC21vL6szrVw9M=" crossorigin="anonymous">

Existe una característica similar en el Nivel 2 de la Política de seguridad del contenido , pero solo restringe el contenido de los elementos <script> y <style> , no los externos.

¿Existe alguna implementación o especificación para incluir un hash o una firma en un atributo de una etiqueta <script>, de modo que el navegador pueda verificar que se recuperó el archivo correcto antes de ejecutarlo? Algo como:

<script src="http://cdn.example.com/jquery-2001.js" signature="sha-256/e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855" ></script>

La motivación es la siguiente: generalmente, cada CDN o host adicional que usa para su sitio aumenta su vulnerabilidad, al agregar un nuevo objetivo que puede ser pirateado para comprometer su sitio. Permitir que sus servidores front-end primarios hagan valer hashes o firmas de esos archivos podría eliminar por completo ese riesgo, permitiéndole ser más flexible al diseñar su arquitectura. Incluso podría solicitar archivos faltantes de una red de igual a igual no confiable.

Pensé que recordaba una especificación sobre esto, pero no he podido encontrarla.


No parece que sea compatible según los documentos de la Red de desarrolladores de Mozilla:

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/script

Sin embargo, siempre puede obtener un recurso a través de XHR (asumiendo que CORS está configurado), procesarlo y, si está bien, eval (). Sin embargo, si bien un ejercicio técnico interesante no parece práctico.