AngularJS CSP在Chrome中不起作用

时间:2014-03-26 19:00:41

标签: angularjs google-chrome http-status-code-401 content-security-policy angularjs-ng-include

我有一个使用Tomcat和AngularJS(v1.2.14)编写的应用程序。在web.xml中,我在 / * 上设置ContentSecurityFilter,然后在配置中将策略规则设置为允许相同的原点,允许eval并允许不安全的内联。

我已将https://mysite.com/my/app/url映射到index.jsp,最终执行以下操作:

<div id="ng-app" ng-app="myApp" ng-csp>
  <div ng-include="'/my/app/url/static/pages/partials/wizard.html'" class="container-fluid"></div>
</div>

wizard.html是真正的应用程序发生的地方。我有很多AngularJS指令等等。

此设置 在IE和FF中有效,但在CH中不起作用。当我尝试在Chrome中访问我的/ app / url时,不会显示向导。 index.jsp的其余部分显示正常。去开发工具我看到我在wizard.html中遇到了这个错误:

  

无法加载资源:服务器响应状态为401   (未授权)

服务器日志中没有错误。 如果我在web.xml中禁用CSP过滤器映射,则Chrome开始运行正常。但出于安全原因,我必须使用CSP过滤器。

有谁知道如何解决这个问题?任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

解决方案意外地出现了。这是一场完美的风暴&#34;事情。

我在web.xml中设置了一个过滤器来处理401,它排除了css | js | ...而不是html文件。这就是我的html文件返回401错误。 CSP不喜欢它从服务器获得的内容并阻止了wizard.html文件的负载。

因此,通常CSP具体说明发生了什么以及出于什么原因(例如&#34;此类和此类文件被阻止,因为它违反了此类内容安全策略),但这只是部分来自CSP所以它刚刚返回它得到的错误,这是401;从而造成这种令人困惑的情况。

通过将html添加到排除文件列表中 - 我解决了问题。