我有一个泽西岛应用程序已经通过我们的公司网站漏洞工具运行。它带来了一个非常奇怪的漏洞。如果您发送此标题:
"*/*'"!@$^*\/:;.,?{}[]`~-_<sCrIpT>alert(81363)</sCrIpT>"
您在球衣的BODY中收到错误消息:
The HTTP header field "Accept" with value "*/*'"!@$^*\/:;.,?{}[]`~-_<sCrIpT>alert(56224)</sCrIpT>" could not be parsed.
这是我们的安全团队无法接受的。它确实以“text / plain”的形式返回,这是正确的,但我需要更改消息。有什么办法吗?
这是在Tomcat上运行的,我使用的是Jersey 1.14。
答案 0 :(得分:2)
这是来自泽西队的帕维尔:
您应该能够从servlet过滤器中清除实体,或者您可以在Jersey中注册ContainerResponseFilter,例如:
public class PurgeErrorEntityResponseFilter implements ContainerResponseFilter {
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
if(response.getStatus() == 400) {
response.setEntity(null);
}
return response;
}
}
和web.xml:
<init-param>
<param-name>com.sun.jersey.spi.container.ContainerResponseFilters</param-name>
<param-value>x.y.z.PurgeErrorEntityResponseFilter</param-value>
</init-param>
这对我有用。我这样做了:
response.setEntity(StringEscapeUtils.escapeHtml(response.getEntity().toString()));
并且它转义了错误消息。谢谢帕维尔!