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();
}
次のような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'"))
// ...
春のセキュリティドキュメント を参照できます。
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
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();
}
}