gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 18:24:30 24 4
gpt4 key购买 nike

我正在尝试通过在 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
*/
}

}

但是当我在 Controller 中使用 @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 - 负载通过网络服务器反射(reflect)在 HTML 正文中。
  3. 持久 XSS - 负载到达数据库并由网络服务器嵌入到 HTML 正文中。

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

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

请查看XSS prevention cheat sheet from OWASP了解如何防止代码中的 XSS 缺陷。

关于java - Spring:如何在RESTful服务中为@RequestBody添加XSS保护?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60250293/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com