我正在尝试通过在XSS过滤器中创建扩展HttpServletRequestWrapper的RequestWrapper来添加自定义XSS保护。以下代码提供XSS保护:1.请求参数2.有效载荷。
public class XssRequestWrapper extends HttpServletRequestWrapper {
XssRequestWrapper(HttpServletRequest request) {
super(request);
}
@Override
public String getQueryString() {
/*
Custom XSS logic
*/
}
@Override
public String getParameterMap() {
/*
Custom XSS logic
*/
}
@Override
public String getParameterValues() {
/*
Custom XSS logic
*/
}
}
但是当我在控制器中使用@RequestBody Annotation配置REST Api时,不会调用覆盖的getParameterValues。而是调用getInputStream,这导致添加以下内容:
@Override
public ServletInputStream getInputStream() throws IOException {
/*
Custom XSS logic
*/
}
是否有任何更好/理想方式为通过@RequestBody注释传递的数据提供XSS保护?
我对您要通过代码实现的目标有些困惑。
第一件事-三种类型的跨站点脚本(XSS)漏洞:
因此,没有任何方法可以使用请求包装器解决基于DOM的XSS,因为不需要发出请求。
您可能尝试解决第2点和第3点,但是处理请求值是一件不常见的事情。 XSS漏洞与上下文有关,并且,如果您尝试编码或转义而又不知道稍后要在其中使用该值的上下文,则可能会失败。
[请查看XSS prevention cheat sheet from OWASP,以了解如何防止代码中的XSS漏洞。