2014-06-05 24 views
5

unter der Annahme einer funktionierenden Hallo Welt Beispiel für Federsicherheit und Federmvc.Content-Security-Policy Spring Security

, wenn ich eine Spur mit wireshark nehmen sehe ich die folgenden Flags auf der HTTP-Anfrage

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 

Ich mag würde es meine Header hinzufügen:

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

Ich weiß, dass die X- Frame-Options macht fast den gleichen Job, aber trotzdem kann ich besser schlafen. Jetzt denke ich, dass ich es unter der configure Funktion meiner Feder Sicherheitskonfiguration tun müsste aber ich weiß nicht, wie genau, das heißt nehme ich .headers(). Something.something (Selbst-)

@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(); 
    } 

Antwort

11

verwenden Sie einfach die addHeaderWriter Methode wie folgt:

@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'")) 
     // ... 
    } 
} 

Beachten Sie, dass, sobald Sie alle Header angeben, die aufgenommen werden sollen, werden nur die Header enthalten sein wird.

Um die Standard-Header enthalten Sie tun können:

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

Sie auf die spring security documentation verweisen.

+0

wirkt wie ein Zauber, Christophe danke . Eine Sache, die ich bemerkt habe, ist, dass Chrom/Rekonq/Opera die CSS zeigen, wenn die Seite geladen wird, aber Firefox zeigt nicht die CSS, wenn die ".AddHeaderWriter (neue X-Content-Security-Policy", "StaticHeaderWriter" script-src 'self' "))" ist aktiviert. Beachten Sie auch das fehlende "s" im Namen der Methode "StaticHeaderWriter", also "StaticHeadersWriter". Ich habe gesehen, dass dies auch bei der von Ihnen geposteten Referenzdokumentation der Fall ist. – Tito

+0

ok ich fand heraus, warum das in Firefox nicht funktionierte. Ich musste die gekauften Header "X-Content-Security-Polic" und "Content-Security-Policy" als Übergangserklärung hier https://developer.mozilla.org/en-US/docs/Web/Security/CSP/Using_Content_Security_Policy verwenden – Tito