2012-10-04 34 views
4

我有一个已通过我们公司网站漏洞工具运行的泽西岛应用程序。它回来了一个很奇怪的漏洞。如果你在这头派:如何更改Jersey创建的错误消息?

"*/*'"[email protected]$^*\/:;.,?{}[]`~-_<sCrIpT>alert(81363)</sCrIpT>" 

你从球衣得到一条错误消息背在身上:

The HTTP header field "Accept" with value "*/*'"[email protected]$^*\/:;.,?{}[]`~-_<sCrIpT>alert(56224)</sCrIpT>" could not be parsed. 

这是不能接受的我们的安全团队。它确实以“文本/纯文本”的形式返回,这是正确的,但我需要更改该消息。任何方式来做到这一点?

这是运行在Tomcat上,我使用泽西岛1.14。

+0

当Jersey资源返回时,您能够执行任何成功或异常检查吗? – asteri

+0

不,它甚至没有打我的代码。泽西试图将accept头与我设置的失败相匹配,并且他们甚至不能解析这个东西。所以我在代码中看不到任何东西。这是什么使这与Stackoverflow上的其他帖子不同... – markthegrea

+0

哪个应用程序服务器用完了? – amphibient

回答

2

这是帕维尔泽西团队:

您应该能够从您的Servlet过滤器净化的实体,或者您也可以在泽西岛注册ContainerResponseFilter,是这样的:

public class PurgeErrorEntityResponseFilter implements ContainerResponseFilter { 
    @Override 
    public ContainerResponse filter(ContainerRequest request, ContainerResponse response) { 
     if(response.getStatus() == 400) { 
      response.setEntity(null); 
     } 
     return response; 
    } 
} 

和网络.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())); 

并且它逃脱了错误信息。感谢Pavel!