Angular 5& CSP - 拒绝将字符串评估为JavaScript,因为'unsafe-eval'不是允许的脚本来源

时间:2018-05-25 13:41:56

标签: angular content-security-policy

我目前正在尝试向使用Angular 5构建的应用程序引入内容安全策略。我目前正在index.html中使用meta标记实现CSP,尽管我会在未来。我已将以下内容插入到我的应用

<meta http-equiv="Content-Security-Policy" content="script-src 'self'; img-src 'self' data:;media-src 'self'; object-src 'self' data: 'unsafe-eval'; style-src 'self' https://fonts.googleapis.com 'unsafe-inline';">

这几乎涵盖了我的需求,但是当我部署到测试服务器时,浏览器控制台会给我以下消息:

  

未捕获的EvalError:拒绝将字符串评估为JavaScript,因为   'unsafe-eval'不是以下允许的脚本源   内容安全策略指令:“script-src'self'”。

好的,我需要将'unsafe-eval'添加到script-src指令中。这不是一个真正的问题,但它似乎让我担心记住eval()是邪恶的!

对于希望使用CSP的Angular 5应用程序,是否必须在'unsafe-eval'指令中包含script-src?有没有办法可以保留安全功能,阻止使用eval()?是否有必要将此作为Angular使用eval()。我假设Content-Security-Policy元标记的内容是正确的,但我确信情况可能并非如此。

我在angular github上发现了这个问题https://github.com/angular/angular/issues/19142但是我不确定这个问题是否与我有关,因为我在我的应用程序中没有使用SystemJS而是webpack?

非常感谢有关帮助,答案和建议的建议。

1 个答案:

答案 0 :(得分:0)

我遇到了同样的问题,并且我注意到在--prod模式下运行不会产生错误(我使用的是Angular 8)。

根据您的设置,您可以使用客户端响应标头来实施安全策略,因为这不会导致此错误。

如果您的问题仅与在调试模式下运行(使用元标记)有关,则这不是您的解决方案。