为了防止存储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 器,上述值被转义,但是如果参数被注入到如上所示的控制器方法中,则不会转义该值。
为什么?即使它被注入到控制器方法中也有可能逃逸。
暂无答案!
目前还没有任何答案,快来回答吧!