2014-06-05 289 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