web-dev-qa-db-ja.com

コンテンツ-セキュリティ-ポリシーSpringSecurity

springSecurityとSpringMVCのHelloWorldの実用的な例を想定しています。

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がほぼ同じ仕事をしていることは知っていますが、それでも睡眠が良くなります。今、私は私の春のセキュリティ構成のconfigure関数の下でそれを行う必要があると思いますが、正確にはわかりません、つまり.headers()。something.something(self)と思います

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

次のような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'"))
    // ...

春のセキュリティドキュメント を参照できます。

16

StaticHeadersWriterを使用したアプローチは機能しますが、Spring Securityの最新バージョンでは、特別な方法を使用できます。

headers()
    .contentSecurityPolicy("script-src 'self'");

詳細については、ドキュメントを参照してください: https://docs.spring.io/spring-security/site/docs/4.2.x/reference/html/headers.html#headers-csp-configure

10
Slava Semushin

Springセキュリティドキュメントに記載されているように: https://docs.spring.io/spring-security/site/docs/current/reference/html/headers.html

@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/")
        .reportOnly();
}
}
2
tomcyjohn