使用Servlet Filter修改请求参数
在现有的Web应用程序中,您面临XSS漏洞,并且被禁止修改源代码。为了解决这个问题,您打算利用 servlet 过滤器在请求参数到达易受攻击的页面之前对其进行清理。
提供的代码示例演示了您的过滤器类,XssFilter:
import java.io.*;
import javax.servlet.*;
public final class XssFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException
{
String badValue = request.getParameter("dangerousParamName");
String goodValue = sanitize(badValue);
// Unable to modify parameter using request.setParameter
chain.doFilter(request, response);
}
public void destroy() {
}
public void init(FilterConfig filterConfig) {
}
}
但是,您遇到了一个障碍:HttpServletRequest 缺少 setParameter 方法。要克服此限制,请考虑以下方法:
使用 HttpServletRequestWrapper:
利用 HttpServletRequestWrapper 类围绕原始请求创建包装器。您可以重写 getParameter 方法以返回清理后的值。然后,将包装后的请求传递给 chain.doFilter 而不是原始请求。
此方法需要子类化并包装原始请求,但通过将过滤委托给包装后的请求来符合 servlet API。
设置请求属性:
或者,您可以修改目标 servlet 或 JSP 以期望请求属性比危险参数的请求参数。然后,您的过滤器可以检查参数,对其进行清理,并使用 request.setAttribute.
使用清理后的值设置请求属性。此方法更优雅,因为它避免了子类化或欺骗,但需要修改应用程序的代码使用请求属性而不是参数。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3