我目前正在尝试向使用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?
非常感谢有关帮助,答案和建议的建议。
答案 0 :(得分:0)
我遇到了同样的问题,并且我注意到在--prod模式下运行不会产生错误(我使用的是Angular 8)。
根据您的设置,您可以使用客户端响应标头来实施安全策略,因为这不会导致此错误。
如果您的问题仅与在调试模式下运行(使用元标记)有关,则这不是您的解决方案。