如何更改Jersey创建的错误消息?

时间:2012-10-04 14:55:02

标签: java http jersey

我有一个泽西岛应用程序已经通过我们的公司网站漏洞工具运行。它带来了一个非常奇怪的漏洞。如果您发送此标题:

"*/*'"!@$^*\/:;.,?{}[]`~-_<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。

1 个答案:

答案 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()));

并且它转义了错误消息。谢谢帕维尔!