Los CDN nos permiten tomar recursos como archivos Javascript de terceros (léase frameworks o librerías) sin necesidad de hostearlos nosotros y delegando esa reponsabilidad en servidores más robustos, con replicación, mejor capacidad y con un potencial uso de cache, sin embargo esto podría ser riesgoso.
Por ejemplo si el CDN es hackeado o de alguna manera las peticiones redireccionadas podemos estar potencialmente en peligro de cargar archivos maliciosos en nuestro sitio web, por suerte hay una manera de evitarlo.
Integridad de subrecursos
La integridad de subrecursos (SRI) es una característica de seguridad que permite a los navegadores verificar que un recurso recuperado (de un CDN o cualquier otro origen) no ha sido manipulado permitiendo, para ello, espeficar un hash que el navegador utilizará.
Sencillamente podemos indicar en nuestro tag script un hash calculado con algún algorítmo conocido para que el navegador verifique la integridad del recurso que se intenta cargar, veamos el caso de jQuery por ejemplo:
Llamada “normal” al CDN de jQuery
<script src="https://code.jquery.com/jquery-3.1.0.min.js">
El problema acá es que no estamos verificando que el archivo jquery-3-1-0-min.js sea lo que esperamos,
Llamada verificando la integridad del recurso
La forma de agregar la verficación de integridad sería la siguiente:
<script src="https://code.jquery.com/jquery-3.1.0.min.js" integrity="sha256-cCueBR6CsyA4/9szpPfrX3s49M9vUU5BgtiJj06wt/s=" crossorigin="anonymous"></script>
Nótese que agregamos el atributo “integrity” con el valor que indica el hash para verificar la integridad del archivo.
Si intentamos carga el recurso y el hash es incorrecto pasa esto:
¿Cómo podemos calcular el hash?
Bien, hay varias formas,:
- Hacerlo con algún software instaldo localmente.
- Tomarla directamente del sitio del proveedor del archivo como hice yo en este ejemplo.
- Calcularla desde este sitio
Y listo, basante simple, más información sobre SRI en al sitio de Mozilla.
Nos leemos.