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

问题描述 投票:0回答:1

我正在尝试通过在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保护?

java spring security filter xss
1个回答
0
投票

我对您要通过代码实现的目标有些困惑。

第一件事-三种类型的跨站点脚本(XSS)漏洞:

  1. 基于DOM-通常由于JavaScript缺陷而在浏览器中运行。无需服务器调用即可利用此漏洞。
  2. Reflected XSS-有效负载被Web服务器反映在HTML主体中。
  3. Persistent XSS-有效负载落在DB中,并由Web服务器嵌入HTML主体中。

因此,没有任何方法可以使用请求包装器解决基于DOM的XSS,因为不需要发出请求。

您可能尝试解决第2点和第3点,但是处理请求值是一件不常见的事情。 XSS漏洞与上下文有关,并且,如果您尝试编码或转义而又不知道稍后要在其中使用该值的上下文,则可能会失败。

[请查看XSS prevention cheat sheet from OWASP,以了解如何防止代码中的XSS漏洞。

© www.soinside.com 2019 - 2024. All rights reserved.