【发布时间】:2020-02-16 15:54:02
【问题描述】:
我正在尝试通过在 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 注解配置 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 检查。
【问题讨论】:
标签: java spring security filter xss