Java HttpServletRequestWrapper-无法修改请求标头

Java HttpServletRequestWrapper-无法修改请求标头,java,xss,servlet-filters,servlet-3.0,Java,Xss,Servlet Filters,Servlet 3.0,我有一个servlet过滤器,它调用RequestWrapper类来检查和修改请求头 public String getHeader(String name) { String value = super.getHeader(name); if (value == null) return null; return removeUnexpectedCharacters(value); } private String removeUnexpectedChar

我有一个
servlet过滤器
,它调用
RequestWrapper
类来检查和修改请求头

public String getHeader(String name) {
    String value = super.getHeader(name);
    if (value == null)
      return null;
    return removeUnexpectedCharacters(value);
}

private String removeUnexpectedCharacters(String value)
{
    value = value.replaceAll("script", "");
    value = value.replaceAll("alert", "");
    System.out.println("before return: " + value);
    return value;
}
public final类RequestWrapper扩展了HttpServletRequestWrapper

我正在重写
RequestWrapper
类中的
getHeader
方法来修改请求头

public String getHeader(String name) {
    String value = super.getHeader(name);
    if (value == null)
      return null;
    return removeUnexpectedCharacters(value);
}

private String removeUnexpectedCharacters(String value)
{
    value = value.replaceAll("script", "");
    value = value.replaceAll("alert", "");
    System.out.println("before return: " + value);
    return value;
}
在服务器日志中,我可以看到这段代码正在执行,它实际上也在删除字符,但是当
response
呈现到浏览器时,它也包含删除的字符

当我从服务器请求具有以下URL的页面时,它应该从
用户名
参数中删除黑名单字符,如
脚本
警报

https://xxx:8443/ProjectName/login?username=%3E%22%27%3E%3Cscript%3Ealert%2860%29%3C%2Fscript%3E

预期URL:

https://xxx:8443/ProjectName/login?username=%3E%22%27%3E%3C%3E%2860%29%3C%2F%3E


我无法理解这里的问题是什么。有人能帮我吗?

从你的问题来看,我觉得你应该包装服务器的响应,而不是传入的请求。见此: 这应该是更改包装器扩展的类的问题,即


实现应该不需要更改(但我没有检查)。

我已经更新了问题的更多细节。你能检查一下你的答案是否仍然符合问题的要求吗?我只需要删除请求中的黑名单字符。哦,我明白了。您可以检查使用username参数的服务器代码是否接收到清理后的值吗?它对值没有任何作用。参数化值将出现并位于
HTMLDOM
中,我不希望出现这种情况。。。这就是我仅在筛选器中删除的内容。编辑后是否尝试将值添加回标头中?(我甚至不知道这是否可能,但我看不出它不起作用的其他原因)。实际上,大多数漏洞问题已经在应用程序中得到修复。主要有两个问题:一,。无法从请求参数中删除黑名单字符。2.从请求头中删除黑名单字符的书面代码没有按预期工作。@BalusC您能帮助我如何从请求参数中删除黑名单字符吗。假设我必须用现有的方法来做。因为改变一切都需要很长的时间,而我不是那种人。希望你能理解。
public final class ResponseWrapper extends HttpServletResponseWrapper