如何修复 Findbugs HTTP 参数直接写入 HTTP 标头输出

Posted

技术标签:

【中文标题】如何修复 Findbugs HTTP 参数直接写入 HTTP 标头输出【英文标题】:How to fix Findbugs HTTP parameter directly written to HTTP header output 【发布时间】:2015-10-10 22:08:29 【问题描述】:

我有一个类 RequestFilter 和 @Override 方法 doFilterInternal。当我为响应添加标头时,findbugs 显示错误 HTTP 参数直接写入 HTTP 标头输出。那么我该如何解决这个问题呢?谢谢大家。

String rqHd = request.getHeader("Access-Control-Request-Headers");    
response.addHeader("Access-Control-Allow-Headers", rqHd); // findbugs error here

【问题讨论】:

错误是什么? 【参考方案1】:

我认为这是 HRS_REQUEST_PARAMETER_TO_HTTP_HEADER 错误,您可以这样修复它:

String rqHd = request.getHeader("Access-Control-Request-Headers"); 
if(rqHd != null)
    String rqHeader = URLEncoder.encode(rqHd,StandardCharsets.UTF_8.displayName());   
    response.addHeader("Access-Control-Allow-Headers", rqHeader);

【讨论】:

【参考方案2】:

如果您不想设置 ETag 标头,请注意。 ETag 看起来像 W/"myetagvalue"

String etagHd = request.getHeader(HttpHeaders.ETAG);    
response.addHeader(HttpHeaders.ETAG,  URLEncoder.encode(etagHd,StandardCharsets.UTF_8.displayName()); 

将被编码为W%2F%22myetagvalue%22 小心!

【讨论】:

以上是关于如何修复 Findbugs HTTP 参数直接写入 HTTP 标头输出的主要内容,如果未能解决你的问题,请参考以下文章

Web常见漏洞及修复建议

Eclipse FindBugs的安装

checkStype和findBugs校验

phpcms2008网站漏洞如何修复 远程代码写入缓存漏洞利用

findBugs安装

findbugs教程