4

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

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

您从球衣的 BODY 中收到一条错误消息:

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

这对我们的安全团队来说是不可接受的。它确实以“文本/纯文本”的形式返回,这是正确的,但我需要更改消息。有什么办法可以做到这一点?

这是在 Tomcat 上运行的,我使用的是 Jersey 1.14。

4

1 回答 1

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

它逃脱了错误消息。谢谢帕维尔!

于 2012-10-04T17:04:31.290 回答