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