はじめに
脆弱性の対応などで、特定のrequest(あるヘッダーの値が不正など)を受けつないようにしたい、といったことがあります。Spring SecurityにはRequestMatcherという仕組みがあり、こういったケースに対応しやすいです。その実装例の記事です。
実装例
次のような方針で実装します。
- 不正なリクエストにマッチするRequestMatcherを実装する
- それをつかって、SecurityFilterChainで403を返すようにする
@Component
public class IllegalHeaderMatcher implements RequestMatcher {
@Override
public boolean matches(HttpServletRequest request) {
return request.getHeader("sample").contains("bad");
}
}
@Bean
SecurityFilterChain accessDeny(HttpSecurity http, IllegalHeaderMatcher illegalHeaderMatcher) {
http.securityMatcher(illegalHeaderMatcher)
.authorizedHttpRequest(authz -> authz.anyRequest().denyAll());
return http.build();
}
RequestMatcherは複数をand/orで組み合わせこともできるので、複雑な条件にも対応しやすく、不正なリクエストの条件をRequestMatcherの形で切り出しやすいです。