我在我的 Web 应用程序中使用 Jersey。发送到服务器的数据为 JSON 格式,在服务器端依次解组,获取的对象用于进一步处理。安全审计为这种方法提出了一些漏洞。
我的休息代码:
@POST
@Path("/registerManga")
@Produces(MediaType.APPLICATION_JSON)
public Response registerManga(MangaBean mBean){
System.out.println(mBean);
return Response.status(200).build();
}
漫画豆:
public class MangaBean {
public String title;
public String author;
@Override
public String toString() {
return "MangaBean [title=" + title + ", author=" + author + "]";
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
}
数据以这种格式发送:
["title":"Bleach","author":"kubo tite"]
上述数据已成功解组为一个对象,我将其作为输出:
MangaBean [title=Bleach, author=kubo tite]
但是如果数据改成:
["title":"<script>alert("123");</script>","author":"kubo tite"]
发生 500 内部服务器错误并向用户显示:
javax.servlet.ServletException: org.codehaus.jackson.JsonParseException: Unexpected character ('1' (code 49)): was expecting comma to separate OBJECT entries
at [Source: org.apache.catalina.connector.CoyoteInputStream@19bd1ca; line: 1, column: 28]
com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:420)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
的意外发生""
导致解析器出错。由于解组是在幕后完成的,我无法控制它,我无法处理引发的异常。
我的问题是如何处理此异常并向用户返回正确的响应而不是堆栈跟踪。请指教。