2014-06-05 241 views
5

假设一个工作hello世界春季安全和弹簧mvc的例子。内容安全策略春季安全

当我需要使用Wireshark痕迹,我看到在HTTP请求

X-Content-Type-Options: nosniff 
X-XSS-Protection: 1; mode=block 
Cache-Control: no-cache, no-store, max-age=0, must-revalidate 
Pragma: no-cache 
Expires: 0 
Strict-Transport-Security: max-age=31536000 ; includeSubDomains 
X-Frame-Options: DENY 
Set-Cookie: JSESSIONID=XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX; Path=/; Secure; HttpOnly 

我想加入到我的头以下标志:

Content-Security-Policy: script-src 'self' 

我知道X- Frame-Options几乎完成了同样的工作,但仍然让我睡得更好。 现在,我想我需要做的是我的春天安全配置的配置作用下,但是我不知道究竟怎么了,即我想 .headers()。something.something(个体经营)

@Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
//   .csrf().disable() 
//   .headers().disable() 
      .authorizeRequests() 
       .antMatchers( "/register", 
           "/static/**", 
           "/h2/**", 
           "/resources/**", 
          "/resources/static/css/**", 
           "/resources/static/img/**" , 
           "/resources/static/js/**", 
           "/resources/static/pdf/**"        
           ).permitAll() 
       .anyRequest().authenticated() 
       .and() 
      .formLogin() 
       .loginPage("/login") 
       .permitAll() 
       .and() 
      .logout() 
       .permitAll(); 
    } 

回答

11

使用时只需将addHeaderWriter方法是这样的:

@EnableWebSecurity 
@Configuration 
public class WebSecurityConfig extends 
    WebSecurityConfigurerAdapter { 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
    http 
     // ... 
     .headers() 
     .addHeaderWriter(new StaticHeadersWriter("X-Content-Security-Policy","script-src 'self'")) 
     // ... 
    } 
} 

需要注意的是,只要你指定要包括的任何标题,那么只有那些标题将是包括。

要包括默认的标题,你可以这样做:

http 
    .headers() 
    .contentTypeOptions() 
    .xssProtection() 
    .cacheControl() 
    .httpStrictTransportSecurity() 
    .frameOptions() 
    .addHeaderWriter(new StaticHeadersWriter("X-Content-Security-Policy","script-src 'self'")) 
    // ... 

您可以参考spring security documentation

+0

的作品就像一个魅力,克里斯托夫谢谢。我注意到的一件事是,铬/ rekonq/opera会在页面加载时显示css,但是当“.addHeaderWriter(新的StaticHeaderWriter(”X-Content-Security-Policy“,” script-src'self'“))”已启用。还要注意方法名称“StaticHeaderWriter”中的缺少“s”,即“StaticHeadersWriter”。我已经看到,您发布的参考文档也是如此。 – Tito

+0

好吧,我发现为什么这不是在Firefox中工作。我需要在这里使用购买的标题“X-Content-Security-Policy”和“Content-Security-Policy”转换说明https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy – Tito