1

我有一个使用 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 中访问 my/app/url 时,wizard.html 没有显示。index.jsp 的其余部分显示正常。去开发工具我看到我得到了wizard.html的这个错误:

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

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

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

4

1 回答 1

0

解决方案出乎意料。这是一场“完美风暴”。

我在 web.xml 中有一个过滤器设置来处理 401,它排除了诸如 css|js|... 之类的东西,但不包括 html 文件。所以那是为我的 html 文件返回 401 错误。CSP 不喜欢它从服务器获得的内容并阻止了wizard.html 文件的加载。

所以通常 CSP 会具体说明发生的事情和原因(例如“某某文件被阻止,因为它违反了某某内容安全策略),但这只是部分来自 CSP,所以它只是返回了它自己得到的错误,这是401;因此造成了这种混乱的情况。

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

于 2014-03-28T17:31:32.983 回答