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.