2012-10-04 36 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!