Skip to content

Commit 60d0ea1

Browse files
committed
Fix Content-Sppoofing/Text injection vulnerability
1 parent 61d6b5d commit 60d0ea1

3 files changed

Lines changed: 26 additions & 5 deletions

File tree

server/src/fat/java/com/ibm/ws/lars/rest/ApiTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1281,7 +1281,7 @@ public void testServletSend500() throws ClientProtocolException, IOException {
12811281
@Test
12821282
public void testServletSend404() throws ClientProtocolException, IOException {
12831283
String response = repository.doGet("/provoke-error-servlet?type=404", 404);
1284-
assertThat(response, containsString("Test Error"));
1284+
assertJsonErrorResponse(404, "Not found", response);
12851285
}
12861286

12871287
/**

server/src/main/java/com/ibm/ws/lars/rest/ErrorHandler.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -42,16 +42,27 @@ public class ErrorHandler extends HttpServlet {
4242

4343
@Override
4444
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
45+
// copy the status code from the request, default to 500 if not set
46+
Integer statusCode = (Integer)request.getAttribute("javax.servlet.error.status_code");
47+
int status = (statusCode == null)?500:statusCode.intValue();
4548

46-
response.setStatus(500);
49+
// copy the message from the request, but override it for error codes 500 and 404
50+
String message = (String)request.getAttribute("javax.servlet.error.message");
51+
if(message == null || status == 500) {
52+
message = "Internal server error, please contact the server administrator";
53+
} else if(status == 404) {
54+
message = "Not found";
55+
}
56+
57+
response.setStatus(status);
4758
response.setContentType(MediaType.APPLICATION_JSON);
4859
PrintWriter printWriter = response.getWriter();
4960
JsonGenerator frontPageJsonGenerator = new JsonFactory().createGenerator(printWriter);
5061
frontPageJsonGenerator.setPrettyPrinter(new DefaultPrettyPrinter());
5162

5263
frontPageJsonGenerator.writeStartObject();
53-
frontPageJsonGenerator.writeStringField("message", "Internal server error, please contact the server administrator");
54-
frontPageJsonGenerator.writeNumberField("statusCode", response.getStatus());
64+
frontPageJsonGenerator.writeStringField("message", message);
65+
frontPageJsonGenerator.writeNumberField("statusCode", status);
5566
frontPageJsonGenerator.writeEndObject();
5667

5768
frontPageJsonGenerator.flush();

server/src/main/webapp/WEB-INF/web.xml

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,19 @@
3131
<error-code>500</error-code>
3232
<location>/error</location>
3333
</error-page>
34+
35+
<error-page>
36+
<error-code>404</error-code>
37+
<location>/error</location>
38+
</error-page>
3439

3540
<error-page>
3641
<exception-type>javax.servlet.ServletException</exception-type>
3742
<location>/error</location>
3843
</error-page>
39-
</web-app>
44+
45+
<error-page>
46+
<exception-type>java.lang.Exception</exception-type>
47+
<location>/error</location>
48+
</error-page>
49+
</web-app>

0 commit comments

Comments
 (0)