在我们使用Spring Security
开发Spring MVC
应用时,有的时候会遇到RequestRejectedException
,这时候应该怎么办呢 ?
实际上,RequestRejectedException
是Spring Security
的防火墙机制抛出的。如果遇到了该异常,开发人员可以从以下几个方面检查是否存在问题 :
- 请求路径中是否包含
./
,/../
,/.
等字符串序列,这些字符串序列会被认为是有安全问题的,从而导致该异常; - 请求路径中是否包含连续的两个斜杠
//
(除了协议部分的//
之外),该字符串序列也会导致该异常;如果请求路径是浏览器端代码拼装出来的,这个问题可能会经常出现,此时开发人员应该是没有恶意的,但
Spring Security
防火墙并不能识别这一点,所以一样会拒绝该请求。所以开发人员需要在这里多加留意。否则会可能增加不少开发调试成本。 - 如果请求路径中包含不可打印
ASCII
字符则会抛出该异常拒绝该请求; - 如果请求
URL
(无论是URL
编码前还是URL
编码后)包含了分号(;
或者%3b
或者%3B
)则会抛出该异常拒绝该请求; - 如果请求
URL
(无论是URL
编码前还是URL
编码后)包含了斜杠(%2f
或者%2F
)则会抛出该异常拒绝该请求; - 如果请求
URL
(无论是URL
编码前还是URL
编码后)包含了反斜杠(\
或者%5c
或者%5B
)则会抛出该异常拒绝该请求; - 如果请求
URL
在URL
编码后包含了%25
(URL
编码了的百分号%
),或者在URL
编码前包含了百分号%
则会抛出该异常拒绝该请求; - 如果请求
URL
在URL
编码后包含了URL
编码的英文句号.
(%2e
或者%2E
)则会抛出该异常拒绝该请求。