Spring:如何在RESTful服务中为@RequestBody添加XSS保护



我正试图通过在XSS过滤器中创建一个扩展HttpServlet请求包装的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保护?

编辑:解决方案:https://www.baeldung.com/spring-reading-httpservletrequest-multiple-times由于我在以前的一个过滤器中使用了ContentCachingRequestWrapper,所以我无法使用相同的过滤器,因此继续使用上述解决方案。通过缓存请求,我可以多次读取它,并对缓存的内容执行XSS检查

我对您试图用代码实现的目标有点困惑。

首先,有三种类型的跨站点脚本(XSS(漏洞:

  1. 基于DOM的-在浏览器中运行通常是由于JavaScript中的缺陷。无需服务器调用即可利用该漏洞
  2. 反射XSS-web服务器将有效负载反映在HTML正文中
  3. 持久XSS-有效负载位于DB中,并由web服务器嵌入到HTML主体中

因此,您无法使用请求包装器来处理基于DOM的XSS,因为不需要发出请求。

您可能会尝试解决第2点和第3点,但处理请求值是一件不常见的事情。XSS漏洞是上下文敏感的,如果您试图在不知道稍后将在其中使用该值的上下文的情况下进行编码或转义,则可能会失败。

请查看OWASP的XSS预防备忘单,了解如何防止代码中的XSS缺陷。

相关内容

  • 没有找到相关文章

最新更新