Application Servers & Java
[오류 해결] Invalid URL encoding 에러 원인과 해결 방법 (Spring + Tomcat 환경)
midworker
2025. 5. 14. 21:35
반응형
[오류 해결] Invalid URL encoding 에러 원인과 해결 방법 (Spring + Tomcat 환경)
웹 애플리케이션을 운영하다 보면 종종 아래와 같은 에러 로그를 마주치게 됩니다.
org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.IllegalArgumentException: Invalid URL encoding.
Caused by: java.lang.IllegalArgumentException: Invalid URL encoding.
이 오류는 클라이언트가 보낸 URL 또는 쿼리 파라미터에 유효하지 않은 인코딩 문자열이 포함되어 있을 때 발생합니다.
✅ 원인 정리
원인 | 설명 |
---|---|
잘못된 % 인코딩 | % 다음에 2자리 16진수가 아닌 문자열 포함 (예: %2 , %GZ ) |
브라우저 자동 인코딩 오류 | 한글 등 비 ASCII 문자가 제대로 인코딩되지 않은 상태로 전송 |
크롤러/봇 요청 | 유효하지 않은 URL을 포함한 비정상 요청 |
프록시/게이트웨이 오류 | 중간에서 이중 인코딩 또는 디코딩 발생 가능 |
Tomcat 기본 동작 | 기본적으로 strict한 URL decoding을 수행함 (org.apache.catalina.connector.Connector ) |
✅ 재현 예시
아래와 같은 요청 URL이 있을 경우:
http://example.com/search?q=%GG
%GG
는 유효하지 않은 16진수이기 때문에 decoding 시 IllegalArgumentException이 발생합니다.
✅ 해결 방법
1. Tomcat 설정 변경 (유효하지 않은 인코딩 허용)
server.xml
또는 Spring Boot 환경의 application.properties에서 relaxedQueryChars
설정을 통해 일부 문자를 허용할 수 있습니다.
[Tomcat standalone]
<Connector port="8080" ... relaxedQueryChars="[]|{}^`" />
[Spring Boot application.properties]
server.tomcat.relaxed-query-chars=|{}[]\
단, 이 설정은 특정 문자에만 적용되며 잘못된 % 인코딩(예:
%Z
) 자체는 허용되지 않음
2. WebFilter 또는 Interceptor에서 사전 필터링
URL의 raw query string을 분석해 유효하지 않은 인코딩 요청을 차단할 수 있습니다.
@WebFilter("/*")
public class EncodingValidationFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String query = ((HttpServletRequest) request).getQueryString();
if (query != null && !isValidEncoding(query)) {
((HttpServletResponse) response).sendError(HttpServletResponse.SC_BAD_REQUEST, "Invalid URL encoding");
return;
}
chain.doFilter(request, response);
}
private boolean isValidEncoding(String query) {
try {
URLDecoder.decode(query, StandardCharsets.UTF_8.name());
return true;
} catch (IllegalArgumentException e) {
return false;
}
}
}
3. 로그 필터링 및 패턴 차단 (예: Web Application Firewall)
%
문자가 포함된 쿼리 스트링 중 비정상적인 요청을 분석- 크롤러/공격 도구에서 오는 요청은 접근 차단
✅ 보안 고려사항
이 오류를 무조건 무시하거나 모두 허용하면 URL Injection, XSS, Path Traversal 공격에 노출될 수 있습니다.
정상적인 범위 내에서만 허용하거나, 사전 필터로 선별 처리하는 것이 가장 안전한 방식입니다.
✅ 마무리
"Invalid URL encoding"은 단순한 문자 오류로 보이지만, 실제 운영 환경에서는 보안/프록시/게이트웨이/브라우저 등 다양한 계층의 영향을 받을 수 있습니다.
디코딩 예외가 발생할 경우 요청 전체를 분석하고, 필요하다면 방어 필터나 설정 변경을 통해 유연하게 대응하세요.
반응형