angular - escape - ng-hide
Hacer que Angular trabaje con una polĂtica de seguridad de contenido(CSP) restrictiva (2)
El problema se resolvió con la última versión de Angular CLI (comenzando con 1.0.0-beta.17). El siguiente comando sirve a una aplicación que funciona porque incluye una compilación de cabecera de tiempo.
ng serve --prod
No puedo hacer que la aplicación Angular2 (final) base funcione con el siguiente CSP restrictivo.
default-src ''none'';
script-src ''self'';
style-src ''self'';
font-src ''self'';
img-src ''self'' data:;
connect-src ''self''
Hay un error unsafe-eval en lang.js y dos en zone.js ¿Podrías dar una solución?
Paso para reproducir con Angular CLI.
He creado un repositorio de GitHub . También puede seguir las instrucciones a continuación.
Utilice la última CLI angular con webpack 6.0.8 y la nueva aplicación creada con las instrucciones a continuación.
ng new csp-test
Inserte en el index.html la etiqueta meta que define la siguiente política de seguridad de contenido restrictiva.
<meta
http-equiv="Content-Security-Policy"
content="default-src ''none'';script-src ''self'';style-src ''self'';font-src ''self'';img-src ''self'' data:;connect-src ''self''">
Entonces sirve la aplicación.
ng serve
Acceda a http://localhost:4200/ , la página no se carga ya que los scripts están bloqueados por CSP.
Los errores
lang.js
lang.js:335 Uncaught EvalError: Refused to evaluate a string as JavaScript because ''unsafe-eval'' is not an allowed source of script in the following Content Security Policy directive: "script-src ''self''".
con el código fuente.
335: return new (Function.bind.apply(Function, [void 0].concat(fnArgNames.concat(fnBody))))().apply(void 0, fnArgValues);
zone.js
zone.js:344 Unhandled Promise rejection: Refused to evaluate a string as JavaScript because ''unsafe-eval'' is not an allowed source of script in the following Content Security Policy directive: "script-src ''self''".
; Zone: <root> ; Task: Promise.then ; Value: EvalError: Refused to evaluate a string as JavaScript because ''unsafe-eval'' is not an allowed source of script in the following Content Security Policy directive: "script-src ''self''".
zone.js:346 Error: Uncaught (in promise): EvalError: Refused to evaluate a string as JavaScript because ''unsafe-eval'' is not an allowed source of script in the following Content Security Policy directive: "script-src ''self''".(…)
con el código fuente.
343: if (rejection) {
344: console.error(''Unhandled Promise rejection:'', rejection instanceof Error ? rejection.message : rejection, ''; Zone:'', e.zone.name, ''; Task:'', e.task && e.task.source, ''; Value:'', rejection, rejection instanceof Error ? rejection.stack : undefined);
345: }
346: console.error(e);
El uso del compilador de plantillas sin conexión debería solucionar este problema.
http://www.syntaxsuccess.com/viewarticle/offline-compilation-in-angular-2.0 https://github.com/angular/angular/issues/1744