Skip to content
java
org.springframework.security.web.firewall.RequestRejectedException: 
The request was rejected because the URL contained a potentially malicious String "//"

์š”์ฒญ์ด ๊ฑฐ๋ถ€๋˜๋Š” ์ด์œ  โ€‹

์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ ๊ธฐ๋ฐ˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ๋ฅผ ์‚ฌ์šฉํ–ˆ๋‹ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ ์ ์šฉ๋˜๋Š” HttpFirewall ๊ตฌํ˜„์ฒด์— ์˜ํ•ด ์—ฐ์†๋˜๋Š” ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๋ฅผ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋„๋ก ๋˜์–ด์žˆ๋‹ค. REST API๋กœ ๋””์ž์ธํ•˜๋Š” ๊ฒฝ์šฐ PathVariable ๋กœ ๊ฒฝ๋กœ ์ƒ์˜ ๋ฆฌ์†Œ์Šค ์•„์ด๋””๋ฅผ ๊ฒ€์ฆํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋Œ€๋ถ€๋ถ„์ด๋‹ค. ๋”ฐ๋ผ์„œ, ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ URL ๊ฒฝ๋กœ ์ƒ ์—ฐ์†๋œ ์Šฌ๋ž˜์‹œ ๋ฌธ์ž๋Š” ์„œ๋ฒ„ ์ž…์žฅ์—์„œ ์ž˜๋ชป๋œ ์š”์ฒญ์— ํ•ด๋‹น๋œ๋‹ค.

java
@Bean
public WebSecurityCustomizer webSecurityCustomizer() {
    return webSecurity -> webSecurity.httpFirewall(httpFirewall())
            .ignoring().requestMatchers("/error");
}

@Bean
public HttpFirewall httpFirewall() {
    // NOTE: Spring Security provides DefaultHttpFirewall and StrictHttpFirewall.
    StrictHttpFirewall httpFirewall = new StrictHttpFirewall();
    httpFirewall.setAllowSemicolon(false);
    httpFirewall.setAllowNull(false);
    httpFirewall.setAllowBackSlash(false);
    httpFirewall.setAllowUrlEncodedDoubleSlash(false);

    List<String> allowedHttpMethods = Stream.of(
                    HttpMethod.GET,
                    HttpMethod.POST,
                    HttpMethod.PUT,
                    HttpMethod.DELETE,
                    HttpMethod.OPTIONS)
            .map(HttpMethod::name)
            .toList();
    httpFirewall.setAllowedHttpMethods(allowedHttpMethods);
    return httpFirewall;
}

๊ฑฐ๋ถ€๋œ ์š”์ฒญ์„ ๋ฌด์‹œํ•˜์ง€ ๋ง๊ณ  ์ถ”์ ํ•˜์„ธ์š” โ€‹

์˜ฌ๋ฐ”๋ฅธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์•„๋‹Œ ๋ด‡์— ์˜ํ•œ ์ž˜๋ชป๋œ ์š”์ฒญ์ผ ์ˆ˜ ์žˆ์œผ๋‚˜ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์„œ๋ฒ„์—์„œ ์š”๊ตฌํ•˜๋Š” REST API ์„ค๊ณ„๋Œ€๋กœ ์š”์ฒญํ•˜์ง€ ์•Š์•˜์„ ๊ฐ€๋Šฅ์„ฑ์„ ๊ฐ„๊ณผํ•ด์„œ๋Š” ์•ˆ๋œ๋‹ค. ์„œ๋ฒ„์—์„œ๋Š” ์ตœ์†Œํ•œ ์ด๋Ÿฌํ•œ ์š”์ฒญ์— ๋Œ€ํ•ด์„œ ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ๋˜๋Š” Sentry์™€ ๊ฐ™์€ ์˜ค๋ฅ˜ ์ถ”์  ์†”๋ฃจ์…˜์œผ๋กœ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‚จ๊ฒจ์•ผํ•œ๋‹ค.

๋งŒ์•ฝ, AWS WAF๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์„ค์ •๊ณผ ๊ทœ์น™์— ๋”ฐ๋ผ ๋”๋ธ” ์Šฌ๋ž˜์‹œ๊ฐ€ ํฌํ•จ๋œ ์š”์ฒญ์ด ์„œ๋ฒ„ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๊นŒ์ง€ ๋„๋‹ฌํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ์Œ์„ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž๋Š” ์•Œ๊ณ  ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

Released under the MIT License.