[英]Spring: How to add XSS protection to @RequestBody in a RESTful service?
我试图通过在 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 保护?
编辑:解决方案: https : //www.baeldung.com/spring-reading-httpservletrequest-multiple-times因为我在以前的过滤器之一中使用了 ContentCachingRequestWrapper,所以我无法使用它,因此继续使用上述解决方案. 通过缓存请求,我能够多次读取它并对缓存的内容执行 XSS 检查。
我对您尝试使用代码实现的目标感到有些困惑。
首先,存在三种类型的跨站脚本 (XSS) 漏洞:
因此,您无法使用请求包装器解决基于 DOM 的 XSS,因为不需要发出请求。
您可能会尝试解决第 2 点和第 3 点,但处理请求值是一件不常见的事情。 XSS 漏洞是上下文敏感的,如果您在不知道稍后使用该值的上下文的情况下尝试编码或转义 - 您可能会失败。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.