エンジニア男

勉強したことの忘備録としてつらつら書いていきます。

spring securityでRequestRejectedExceptionが発生した場合

※参考にさせて頂いたサイト

https://docs.spring.io/spring-security/site/docs/5.0.0.RELEASE/reference/htmlsingle/#request-matching

https://www.ietf.org/rfc/rfc2396.txt

https://sun0range.com/information-technology/request-rejected-exception

 

Spring Security には Http Firewallが実装されており、URIに不正な特殊文字(/ や % など)が含まれていると自動的に拒否するようになっている。

RFC 2396 で定義されている正規のURIではないもの拒否している。

 

以下のようなURIを作成すると、RequestRejectedExceptionが起きてしまう。

※ユーザが入力した文字をURIに使用したりすると起きる。

URL: ~ /test/index/{path}

 

対策として、以下の2点がある。

①ユーザが入力できる文字を制限する。→ バリデーションを作成する。

 

②クエリで送る。

Spring Security の Http Firewall は、contextPath と URI に かかっている処理。

クエリには Http Firewall はかかっていない。