SpringMVC在向控制器方法中注入参数时未校准httpservletrequestwrapper类

bihw5rsg  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(179)

为了防止存储xss,我编写了一个过滤器 HttpServletRequest 进入自定义 Package 。 Package 如下:

public class MyRequestWrapper extends HttpServletRequestWrapper 
{

    public MyRequestWrapper(HttpServletRequest request) {
        super(request);
        // TODO Auto-generated constructor stub
    }

    @Override
    public String getParameter(String s) 
    {
        String val = super.getParameter(s);
        if(val != null && !val.isEmpty())
        {
            return StringEscapeUtils.escapeXml(val);
        }
        return val; 
    }

}

在filter中,我已正确地将 Package 请求传递给chain as, chain.doFilter(new MyRequestWrapper((HttpServletRequest) request), response); 控制器方法如下所示:

@RequestMapping(value={"/contentPost"},method = RequestMethod.POST)
    public String postAttemptDetails(Model model,HttpServletRequest request,Locale locale,String content)
    {
        system.out.println(request.getParameter("content")); // This gives escaped value
        system.out.println(content); // Whereas this won't
    }

假设在查看页面上,我正在进入 xx"onfocus="alert(document.domain)"autofocus="xx .
如果我从 request.getParameter() 然后,由于自定义请求 Package 器,上述值被转义,但是如果参数被注入到如上所示的控制器方法中,则不会转义该值。
为什么?即使它被注入到控制器方法中也有可能逃逸。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题