La respuesta de @ ThiefMaster hace un gran trabajo al enumerar los riesgos de usar un Contenido controlado externamente, que básicamente corresponde a la categoría de ejecutar o mostrar código y contenido arbitrario en el navegador de un usuario.
Me centraré principalmente en su última pregunta: How are those risk mitigated?
que no se ha abordado: desde entonces han cambiado muchas cosas (en 4 años).
La defensa principal cuando se incluyen recursos externos de un CDN es usar Integridad del sub-recurso (SRI) . SRI extiende dos elementos HTML con un atributo de integridad que contiene un hash criptográfico de la representación del recurso que el autor espera cargar. Específicamente, estos son los elementos <script>
y <link>
, comúnmente utilizados para incluir Javascript y CSS de terceros respectivamente.
Ejemplos:
CSS:
< link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/css/bootstrap.min.css" integra="gota de las cosas que se encuentran en el lugar de juego. "anónimo" >
JS:
< script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.2/js/bootstrap.min.js"integridad="SHA384-vZ2WRJMwsjRMW / 8U7i6PWi6AlO1L79snBrmgiDpgIWJ82z8eA5lenwvxbMV1PAh7" crossorigin="anónimo ">
Se pueden usar uno o varios hashes, generalmente generados con openssl con codificación base64. Un navegador usa el "más fuerte" que admite.
Ahora se admite de Chrome y de Firefox .
Cuando estos navegadores encuentran un elemento protegido por SRI, calculan el resumen y devuelven un error de red si no coincide con el resultado esperado. Para protegerse contra una actualización en un CDN, se pueden configurar failovers , ya sea a otros CDN o a su propio servidor.
Otra defensa que puedes observar arriba es el uso del atributo crossorigin="anonymous"
. Esto evita que su navegador envíe cookies a la CDN, evitando así que Fugas de CORS con un efecto secundario de reducir el tamaño de la solicitud.
Finalmente, se puede encontrar un beneficio muy leve al establecer un Content-Security-Policy
restrictivo que limita la superficie de ataque solo a la CDN, de manera que incluso si una CDN vulnerable fue infectada por un archivo JS diferente, no podrá hacerlo directamente. para acceder a los datos (aunque podría hacerlo a través de la CDN).
Aparte de los diversos enlaces anteriores, otra referencia útil es este artículo de Mozilla Hacks .