您应该在哪里配置内容安全政策?

时间:2017-02-24 16:51:44

标签: java angularjs spring tomcat content-security-policy

我有一个角度应用程序,它根据设置与Tomcat上的REST API或Jetty上的REST API进行通信。 angular-app本身就像战争一样托管在同一个tomcat / jetty上。

Tomcat设置可能在前面有一个Apache(取决于客户端)

应用程序需要使用base64图像(通过css加载),但是现在,如果它在服务器上托管,我会收到以下错误:

Refused to load the image 'data:image/png;base64,...' because it violates the following Content Security Policy directive: "default-src https:". Note that 'img-src' was not explicitly set, so 'default-src' is used as a fallback.

所以我做了什么: 在index.html中,我设置了:

<meta http-equiv="Content-Security-Policy"
      content="default-src https: http:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https: http:; style-src http: https: 'unsafe-inline'; img-src 'self' data: https:; connect-src http: https: ws:;">

在手动弹簧过滤器中,我设置了:

httpServletResponse.setHeader("Content-Security-Policy",
                                  "default-src https: http:; script-src 'self' 'unsafe-inline' 'unsafe-eval' https: http:; style-src http: https: 'unsafe-inline'; img-src 'self' data: https:; connect-src http: https: ws:;");

但当然,这没有效果,因为我没有为html / js / css调用API。

据我了解,这并不是要在Tomcat上配置。 您通常在哪里配置内容安全策略/内容安全策略标头?

我需要一个不需要在安装文件的服务器上进行手动配置的解决方案。

提前致谢!

1 个答案:

答案 0 :(得分:0)

Spring Security允​​许用户轻松注入安全标头,以帮助保护其应用程序。以下是内容安全策略的Spring Security Reference Document。请务必注意,Spring Security默认情况下不会添加内容安全策略。 Web应用程序作者必须声明安全策略以强制和/或监视受保护资源。您可以使用Java配置启用CSP标头,如下所示:

@EnableWebSecurity
public class WebSecurityConfig extends
WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
    http
    // ...
    .headers()
        .contentSecurityPolicy("script-src 'self' https://trustedscripts.example.com; object-src https://trustedplugins.example.com; report-uri /csp-report-endpoint/");
}
}