一种基于struts2架构文件上传安全控制方法

文档序号:7794877阅读:279来源:国知局
一种基于struts2架构文件上传安全控制方法
【专利摘要】本发明公开一种基于struts2架构的文件上传安全控制方法,其包括以下步骤:步骤S01:在服务器的structs2配置文件中需要添加bean标签配置和constant标签配置及新建MyRequestParseWrapper类;步骤S02:客户端检查请求上传的文件是否合法;步骤S03:服务器的structs2配置文件调用MyRequestParseWrapper类,使服务器不执行任何存储文件流的操作,然后将文件流请求直接转到action,action检查请求上传的文件是否合法,而后进行临时存储及保存;步骤S04:对文件进行重命名,将文件统一存储为安全的后缀名文件,若上传请求的原文件名如果需要保存,则与新文件名对应保存在数据库中,供需要时获取;使用该方法上传文件安全性高、不提前占据服务器存储且方便客户端获取文件的上传进度。
【专利说明】—种基于struts2架构文件上传安全控制方法
【技术领域】
[0001]本发明涉及struts2架构应用开发【技术领域】,具体涉及一种基于struts2架构文件上传安全控制方法。
【背景技术】
[0002]struts2文件上传并没有提供自己的请求解析器,也就是说struts2不会自己去处理multipart/form-data的请求,它需要调用其他的请求解析器,将http请求中的表单域解析出来。struts2在原有的上传解析器继承上做了进一步封装,虽然封装后简化了文件上传,但是封装后,后台action开始处理之前文件已经在服务器上了,也就是说StrutS2先将上传的数据流保存为一个临时文件再交由后台处理,后台action能做就只是将文件复制到目的地址,这样就产生了诸多问题,具体如下:
[0003](I)、文件的安全性尚未确定,即文件是否为合法类型及合法大小等等;
[0004](2)、struts2会预先将文件缓存到临时目录或内存里,占据服务器存储空间;
[0005](3)、无法获取文件上传进度,后台获取到请求时文件已经在服务器上了,上传过程没有进度;
[0006](4)、文件保存后的安全管理存在问题:有的文件很可能是绑定恶意代码的,如果文件上传后被解析时的类型与预期的不一样就很可能出现安全问题,例如:使用以下命令,将正常图片与带有恶意代码的jsp (也可以是其他类型的代码文件)绑定在一起生成一个新的文件的方式,如以下示例:copy/b test, jpg+ey1.jsp test, jpg,该操作就是讲一个写有恶意代码的jsp文件与一个jpg图片文件合并成一个文件的操作,虽然上传时检测到的后缀名与类型是合法的,但是当这个图片被加载解析时,代码文件也会被解析执行,如果配合文件解析攻击,就能起到webshell的作用,即可执行自定义的各种脚本,所以不加处理的存储上传文件时不安全的。
[0007]为解决以上问题就要改进struts2的上传架构,现有的一些对struts2原有架构的改进目的都是趋于获取文件上传进度,即在不改变原有架构的基础上添加一个监听,来获取文件上传状态,但这是不完善的,相当于尚未确定文件是否安全、是否为合法类型前就先接收了这个文件,而且文件内容有可能绑定了恶意代码,不对文件进行处理的保存也是存在危险的。

【发明内容】

[0008]为了解决现有技术的不足,本发明提供一种基于struts架构文件上传安全控制方法,使用该方法上传文件安全性高、不提前占据服务器存储且方便客户端获取文件的上传进度。
[0009]本发明提供一种基于StrutS2架构的文件上传安全控制方法,其包括以下步骤:
[0010]步骤SOl:在服务器的structs2配置文件中需要添加bean标签配置和constant标签配置覆盖structs2原有自带的配置,以及新建MyRequestParseWrapper类;[0011]步骤S02:客户端检查请求上传的文件的大小、类型、后缀名是否合法,不合法,返回错误提示;合法,则向服务器发送上传文件请求并且开始上传文件;
[0012]步骤S03:服务器的structs2配置文件调用MyRequestParseWrapper类,使服务器不执行任何存储文件流的操作,然后将文件流请求直接转到action, action检查请求上传的文件的大小、类型、后缀名是否合法,不合法,返回错误提示;合法,action将文件流存为临时文件并将临时文件的临时存放路径保存在缓存中,接着,action将临时文件保存到服务器中与临时存放路径对应的位置上,此时,提交上传文件的客户端可以实时的根据临时存放路径获取到文件已上传的大小,进而就可以转化成进度展示;
[0013]步骤S04:对文件进行重命名,将文件统一存储为安全的后缀名文件,若上传请求的原文件名如果需要 保存,则与新文件名对应保存在数据库中,供需要时获取。
[0014]基于上述技术方案的公开,本发明提供一种基于struts〗架构的文件上传安全控制方法具有以下有益效果:
[0015](I)、通过不采用StrutS2原有的封装类,即不预先将上传请求文件保存到服务器的临时文件,这样,在对文件进行合法性检查前,文件就不会占据服务器存储;
[0016](2)、将上传请求直接交由后台action处理,action获取到的request请求就是带文件的了,action在保存文件的过程中,可以方便获取文件上传的状态(上传路径和大小),客户端就可以实时调用action提供的相应方法来获取上传进度了 ;
[0017](3)、文件保存到服务器上,action将临时文件保存到服务器中与临时存放路径对应的位置上,将文件重写,达到安全存储,安全解析的目的,这里的文件重写可以看作是文件的剪切操作。
【专利附图】

【附图说明】
[0018]图1为本发明提出的一种基于StrutS2架构的文件上传安全控制方法的流程图。【具体实施方式】
[0019]如图1所示,本发明提供一种基于struts2架构的文件上传安全控制方法,其包括以下步骤:
[0020]步骤SOl:在服务器的structs2配置文件中需要添加bean标签配置和constant标签配置覆盖structs2原有自带的配置,以及新建MyRequestParseWrapper类;
[0021]步骤S02:客户端检查请求上传的文件的大小、类型、后缀名是否合法,不合法,返回错误提示;合法,则向服务器发送上传文件请求并且开始上传文件;
[0022]步骤S03:服务器的structs2配置文件中的bean标签配置和constant标签配置调用MyRequestParseWrapper类,使服务器不执行任何存储文件流的操作,然后将文件流请求直接转到action, action检查请求上传的文件的大小、类型、后缀名是否合法,不合法即返回错误提示;合法,action将文件流存为临时文件并将临时文件的临时存放路径保存在缓存中,接着,action将临时文件保存到临时存放路径对应的服务器相应的位置上,此时,提交上传文件的客户端可以实时的根据临时存放路径获取到文件已上传的大小,进而就可以转化成进度展示;
[0023]步骤S04:对文件进行重命名,将文件统一存储为安全的后缀名文件,若上传请求的原文件名如果需要保存,则与新文件名对应保存在数据库中,供需要时获取;这种方式就是文件的剪切操作,具体代码实现流程就是将临时文件数据读出然后输出到另一个文件中,然后删除原文件,目的就是去除文件中绑定的恶意代码,解析文件时也不会按照其他格式解析。
[0024]以下对步骤SOl至步骤S03作进一步的说明如下:
[0025]在上传文件的时候,structs2封装request (文件上传请求)对象其实org.apache.struts2.dispatcher, multipart.MultiPartRequest,也就是说在 action 中拿至丨J的实际类型是MultiPartRequestWrapper,此时action拿到对象时文件已经被保存,所以,为了不让structs2解析上传的文件,在structs2配置文件中需要添加bean标签配置和constant标签配置,覆盖structs2原有自带的配置,不用更改struct2的jar包文件,重写 struts2 的 request 这个封装类 org.apache.struts2.dispatcher, multipart.MultiPartRequest,即新建MyRequestParseWrapper类,该类中有个功能是保存临时文件的 parse 方法,MyRequestParseffrapper 继承原有 JakartaMultiPartRequest 的其他方法,然后重写parse方法,让服务器不执行保存临时文件,这样后台action获取到的request就是带有上传文件的了,系统就会自动调用MyRequestParseWrapper类,如下为MyRequestParseffrapper 类的不例:
[0026]
public class MyRnquestParsnWrapper extends JakartaMul t.1 PartRoqnest {
public void parse(HttpServletRequest servlclRcqucst, StringsaveDir)

throws IOException {
/7什么也不做

}
}
[0027]如下为bean标签配置和constant标签配置调MyRequestParseWrapper类,的示 例:
[0028]〈bean
type=^org.apache.struts2, dispatcher, multipart.MultiPartRequestw
namo^^myRoquos iParsor〃
cl ass=//com.bjhi 1.e range, web.1nterceptor.MvRe q ue s I Pa r sefrappe Tfscope="deraull/ opt ional^^true^ />
〈constant
nane=/,siruis.mu 11 i part, parser, val ueymyRequestParsei., />
[0029]应该注意到并理解,在不脱离后附的权利要求所要求的本发明的精神和范围的情况下,能够对上述详细描述的本发明做出各种修改和改进,因此,要求保护的技术方案的范围不受所给出的任何特定示范教导的限制。
【权利要求】
1.一种基于Struts2架构的文件上传安全控制方法,其特征在于,其包括以下步骤:步骤SOl:在服务器的structs2配置文件中需要添加bean标签配置和constant标签配置覆盖structs2原有自带的配置,以及新建MyRequestParseWrapper类; 步骤S02:客户端检查请求上传的文件的大小、类型、后缀名是否合法,不合法,返回错误提示;合法,则向服务器发送上传文件请求并且开始上传文件; 步骤S03:服务器的structs2配置文件调用MyRequestParseWrapper类,使服务器不执行任何存储文件流的操作,然后将文件流请求直接转到action, action检查请求上传的文件的大小、类型、后缀名是否合法,不合法,返回错误提示;合法,action将文件流存为临时文件并将临时文件的临时存放路径保存在缓存中,接着,action将临时文件保存到服务器中与临时存放路径对应的位置上,此时,提交上传文件的客户端可以实时的根据临时存放路径获取到文件已上传的大小,进而就可以转化成进度展示; 步骤S04:对文件进行重命名,将文件统一存储为安全的后缀名文件,若上传请求的原文件名如果需要保存,则与新文件名对应保存在数据库中,供需要时获取。
【文档编号】H04L29/06GK103731430SQ201410009598
【公开日】2014年4月16日 申请日期:2014年1月9日 优先权日:2014年1月9日
【发明者】董再越, 邓铭, 田志宏 申请人:北京哈工大计算机网络与信息安全技术研究中心, 湖南合天智汇信息技术有限公司, 北京合天智汇信息技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1