로그를 보다 보면 하루에 한 번씩은 꼭 보게 되는 로그가 있다.
o.apache.coyote.http11.Http11Processor
: Error parsing HTTP request header
Note
: further occurrences of HTTP request parsing errors will be logged at DEBUG level.
java.lang.IllegalArgumentException
: Invalid character found in the request target
[/index.php?s=/index/\think\app/invokefunction&function=call_user_func_array&vars[0]=md5&vars[1][]=Hello ].
The valid characters are defined in RFC 7230 and RFC 3986
처음에는 '이 ...이게 뭐여?' 하고 당황했지만
아무리 모니터링을 해봐도 내 프로젝트에는 아무런 영향이 없었다.
INFO 레벨 로그이기도 하고 해서 그냥 넘어가려다가
요청 URL에 PHP가 써 있는 것을 보고
'흠... PHP쓰는 프로젝트에 봇이 뭔가 이상한 요청을 보내는 건가?' 라는 생각이 들었다.
조금 찾아보니 역시 예상대로
PHP 기반의 ThinkPHP 프레임워크를 노리는 봇 스캐닝 공격이었다.
여기서 ThinkPHP는 중국에서 많이 사용하는 프레임워크인데,
취약점이 많아 자동화된 봇이 무차별적으로 스캔을 해서 해킹을 시도하는 것이라고 한다.
도둑놈: 이 집 털 수 있나?
(덜컹덜컹)
도둑놈: 에이... 안 되네.
YES!
일단 나는 PHP를 사용한 것도 아니고,
SpringBoot는 요청 URI에 RFC(인터넷 기술들의 공식 규칙)에 맞지 않는 문자(\, [, ] )가 들어오면 요청 자체를 거부해버려서 컨트롤러까지 도달조차 안 된다.
그래서 로그에는 남지만, 실제로 내 애플리케이션 로직에는 아무 영향이 없다.