Está en la página 1de 2

Como veis, la idea es incluir el script junto con su hash (por ejemplo,

SHA-384) al crear la página web. El navegador puede entonces


descargar el script y calcular el hash sobre el archivo descargado. El
script sólo se ejecutará si ambos hashes coinciden, es decir, si comprueba
su integridad criptográfica.
La seguridad de una función resistente a colisiones asegurará que
cualquier modificación genere un hash diferente y esto ayudará al
sitio web a detectar y prevenir cualquier modificación de un servicio
CDN (redes de distribución de contenidos) comprometido o de un
atacante malicioso.

Una nota importante es que para que funcione la Integridad de


Subrecursos, el CDN debe soportar Cross-Origin Resource Sharing
(CORS). El atributo crossorigin en el fragmento de código anterior
fuerza que se cargue CORS y el valor anónimo significa que el
navegador debe omitir cualquier cookie o autenticación que el usuario
pueda haber asociado al dominio. Esto evita las fugas de datos de
crossorigin, y también hace que la petición sea más pequeña.

Además, no sé si os habréis dado cuenta, pero el atributo de


integridad también incluye el nombre digest. Eso es porque la sintaxis
permite múltiples tokens lo que a su vez permite a los propietarios
del sitio especificar hashes diferentes así como los valores de
múltiples scripts que pueden estar detrás de una URL. Esto es útil
para el browser sniffing o para la negociación de contenidos.
 

<script src="https://code.jquery.com/jquery-2.1.4.min.js"
integrity="sha384-R4/ztc4ZlRqWjqIuvf6RX5yb/
v90qNGx6fS48N0tRxiGkqveZETq72KgDVJCp2TC
sha256-8WqyJLuWKRBVhxXIL1jBDD7SDxU936oZkCnxQbWwJVw="
crossorigin="anonymous"></script>

Luego es probable que los administradores no quieran presentar su


sitio como una web inaccesible si los navegadores de los usuarios no
pueden verificar todos los hashes de los elementos cargados desde
un recurso CDN. Para ello pueden mantenerse copias de los scripts en
el propio sitio web y cargar el script directamente en caso necesario,
añadiendo el siguiente código al fragmento anterior:
 

<script>window.jQuery || /* reload from own domain here */;</script>

Respecto a si la Integridad de Subrecursos funciona tanto en HTTP


como en HTTPS, evidentemente el navegador puede averiguar si un
script se modificó en la CDN en HTML plano, pero no estará protegido
de que un atacante activo modifique el atributo de la integridad del
HTML. Por lo tanto para proporcionar confidencialidad, integridad y
autenticidad lo mejor es usar HTTPS en todo sitio web.

Y más cosas para terminar. La Integridad de Subrecursos puede


verificar también CSS utilizando el atributo de integridad en el tag
<link> y si queréis probar la compatibilidad con navegadores o jugar
con ejemplos, echar un vistazo a https://srihash.org/, que puede
hacer todo el trabajo sucio de calcular hashes, así como comprobar si
tu CDN ya lo soporta. BootstrapCDN, CloudFlare y GitHub ya están
experimentando con ello...

Fuente: Do not let your CDN betray you: Use Subresource Integrity

También podría gustarte