Skip to content

Commit ed734d7

Browse files
committed
Trace filter ignores invalid requests
Fixes gh-12987
1 parent 59746de commit ed734d7

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

spring-boot-project/spring-boot-actuator/src/main/java/org/springframework/boot/actuate/web/trace/servlet/HttpTraceFilter.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
package org.springframework.boot.actuate.web.trace.servlet;
1818

1919
import java.io.IOException;
20+
import java.net.URI;
21+
import java.net.URISyntaxException;
2022

2123
import javax.servlet.Filter;
2224
import javax.servlet.FilterChain;
@@ -76,6 +78,10 @@ public void setOrder(int order) {
7678
protected void doFilterInternal(HttpServletRequest request,
7779
HttpServletResponse response, FilterChain filterChain)
7880
throws ServletException, IOException {
81+
if (!isRequestValid(request)) {
82+
filterChain.doFilter(request, response);
83+
return;
84+
}
7985
TraceableHttpServletRequest traceableRequest = new TraceableHttpServletRequest(
8086
request);
8187
HttpTrace trace = this.tracer.receivedRequest(traceableRequest);
@@ -95,6 +101,16 @@ protected void doFilterInternal(HttpServletRequest request,
95101
}
96102
}
97103

104+
private boolean isRequestValid(HttpServletRequest request) {
105+
try {
106+
new URI(request.getRequestURL().toString());
107+
return true;
108+
}
109+
catch (URISyntaxException ex) {
110+
return false;
111+
}
112+
}
113+
98114
private String getSessionId(HttpServletRequest request) {
99115
HttpSession session = request.getSession(false);
100116
return (session != null ? session.getId() : null);

spring-boot-project/spring-boot-actuator/src/test/java/org/springframework/boot/actuate/trace/http/servlet/HttpTraceFilterTests.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,4 +127,13 @@ protected void service(HttpServletRequest req,
127127
}
128128
}
129129

130+
@Test
131+
public void filterRejectsInvalidRequests() throws ServletException, IOException {
132+
MockHttpServletRequest request = new MockHttpServletRequest();
133+
request.setServerName("<script>alert(document.domain)</script>");
134+
this.filter.doFilter(request, new MockHttpServletResponse(),
135+
new MockFilterChain());
136+
assertThat(this.repository.findAll()).hasSize(0);
137+
}
138+
130139
}

0 commit comments

Comments
 (0)