一種基于struts2架構(gòu)文件上傳安全控制方法
【專利摘要】本發(fā)明公開一種基于struts2架構(gòu)的文件上傳安全控制方法,其包括以下步驟:步驟S01:在服務(wù)器的structs2配置文件中需要添加bean標(biāo)簽配置和constant標(biāo)簽配置及新建MyRequestParseWrapper類;步驟S02:客戶端檢查請求上傳的文件是否合法;步驟S03:服務(wù)器的structs2配置文件調(diào)用MyRequestParseWrapper類,使服務(wù)器不執(zhí)行任何存儲文件流的操作,然后將文件流請求直接轉(zhuǎn)到action,action檢查請求上傳的文件是否合法,而后進(jìn)行臨時存儲及保存;步驟S04:對文件進(jìn)行重命名,將文件統(tǒng)一存儲為安全的后綴名文件,若上傳請求的原文件名如果需要保存,則與新文件名對應(yīng)保存在數(shù)據(jù)庫中,供需要時獲?。皇褂迷摲椒ㄉ蟼魑募踩愿?、不提前占據(jù)服務(wù)器存儲且方便客戶端獲取文件的上傳進(jìn)度。
【專利說明】—種基于struts2架構(gòu)文件上傳安全控制方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及struts2架構(gòu)應(yīng)用開發(fā)【技術(shù)領(lǐng)域】,具體涉及一種基于struts2架構(gòu)文件上傳安全控制方法。
【背景技術(shù)】
[0002]struts2文件上傳并沒有提供自己的請求解析器,也就是說struts2不會自己去處理multipart/form-data的請求,它需要調(diào)用其他的請求解析器,將http請求中的表單域解析出來。struts2在原有的上傳解析器繼承上做了進(jìn)一步封裝,雖然封裝后簡化了文件上傳,但是封裝后,后臺action開始處理之前文件已經(jīng)在服務(wù)器上了,也就是說StrutS2先將上傳的數(shù)據(jù)流保存為一個臨時文件再交由后臺處理,后臺action能做就只是將文件復(fù)制到目的地址,這樣就產(chǎn)生了諸多問題,具體如下:
[0003](I)、文件的安全性尚未確定,即文件是否為合法類型及合法大小等等;
[0004](2)、struts2會預(yù)先將文件緩存到臨時目錄或內(nèi)存里,占據(jù)服務(wù)器存儲空間;
[0005](3)、無法獲取文件上傳進(jìn)度,后臺獲取到請求時文件已經(jīng)在服務(wù)器上了,上傳過程沒有進(jìn)度;
[0006](4)、文件保存后的安全管理存在問題:有的文件很可能是綁定惡意代碼的,如果文件上傳后被解析時的類型與預(yù)期的不一樣就很可能出現(xiàn)安全問題,例如:使用以下命令,將正常圖片與帶有惡意代碼的jsp (也可以是其他類型的代碼文件)綁定在一起生成一個新的文件的方式,如以下示例:copy/b test, jpg+ey1.jsp test, jpg,該操作就是講一個寫有惡意代碼的jsp文件與一個jpg圖片文件合并成一個文件的操作,雖然上傳時檢測到的后綴名與類型是合法的,但是當(dāng)這個圖片被加載解析時,代碼文件也會被解析執(zhí)行,如果配合文件解析攻擊,就能起到webshell的作用,即可執(zhí)行自定義的各種腳本,所以不加處理的存儲上傳文件時不安全的。
[0007]為解決以上問題就要改進(jìn)struts2的上傳架構(gòu),現(xiàn)有的一些對struts2原有架構(gòu)的改進(jìn)目的都是趨于獲取文件上傳進(jìn)度,即在不改變原有架構(gòu)的基礎(chǔ)上添加一個監(jiān)聽,來獲取文件上傳狀態(tài),但這是不完善的,相當(dāng)于尚未確定文件是否安全、是否為合法類型前就先接收了這個文件,而且文件內(nèi)容有可能綁定了惡意代碼,不對文件進(jìn)行處理的保存也是存在危險的。
【發(fā)明內(nèi)容】
[0008]為了解決現(xiàn)有技術(shù)的不足,本發(fā)明提供一種基于struts架構(gòu)文件上傳安全控制方法,使用該方法上傳文件安全性高、不提前占據(jù)服務(wù)器存儲且方便客戶端獲取文件的上傳進(jìn)度。
[0009]本發(fā)明提供一種基于StrutS2架構(gòu)的文件上傳安全控制方法,其包括以下步驟:
[0010]步驟SOl:在服務(wù)器的structs2配置文件中需要添加bean標(biāo)簽配置和constant標(biāo)簽配置覆蓋structs2原有自帶的配置,以及新建MyRequestParseWrapper類;[0011]步驟S02:客戶端檢查請求上傳的文件的大小、類型、后綴名是否合法,不合法,返回錯誤提示;合法,則向服務(wù)器發(fā)送上傳文件請求并且開始上傳文件;
[0012]步驟S03:服務(wù)器的structs2配置文件調(diào)用MyRequestParseWrapper類,使服務(wù)器不執(zhí)行任何存儲文件流的操作,然后將文件流請求直接轉(zhuǎn)到action, action檢查請求上傳的文件的大小、類型、后綴名是否合法,不合法,返回錯誤提示;合法,action將文件流存為臨時文件并將臨時文件的臨時存放路徑保存在緩存中,接著,action將臨時文件保存到服務(wù)器中與臨時存放路徑對應(yīng)的位置上,此時,提交上傳文件的客戶端可以實時的根據(jù)臨時存放路徑獲取到文件已上傳的大小,進(jìn)而就可以轉(zhuǎn)化成進(jìn)度展示;
[0013]步驟S04:對文件進(jìn)行重命名,將文件統(tǒng)一存儲為安全的后綴名文件,若上傳請求的原文件名如果需要 保存,則與新文件名對應(yīng)保存在數(shù)據(jù)庫中,供需要時獲取。
[0014]基于上述技術(shù)方案的公開,本發(fā)明提供一種基于struts〗架構(gòu)的文件上傳安全控制方法具有以下有益效果:
[0015](I)、通過不采用StrutS2原有的封裝類,即不預(yù)先將上傳請求文件保存到服務(wù)器的臨時文件,這樣,在對文件進(jìn)行合法性檢查前,文件就不會占據(jù)服務(wù)器存儲;
[0016](2)、將上傳請求直接交由后臺action處理,action獲取到的request請求就是帶文件的了,action在保存文件的過程中,可以方便獲取文件上傳的狀態(tài)(上傳路徑和大小),客戶端就可以實時調(diào)用action提供的相應(yīng)方法來獲取上傳進(jìn)度了 ;
[0017](3)、文件保存到服務(wù)器上,action將臨時文件保存到服務(wù)器中與臨時存放路徑對應(yīng)的位置上,將文件重寫,達(dá)到安全存儲,安全解析的目的,這里的文件重寫可以看作是文件的剪切操作。
【專利附圖】
【附圖說明】
[0018]圖1為本發(fā)明提出的一種基于StrutS2架構(gòu)的文件上傳安全控制方法的流程圖。【具體實施方式】
[0019]如圖1所示,本發(fā)明提供一種基于struts2架構(gòu)的文件上傳安全控制方法,其包括以下步驟:
[0020]步驟SOl:在服務(wù)器的structs2配置文件中需要添加bean標(biāo)簽配置和constant標(biāo)簽配置覆蓋structs2原有自帶的配置,以及新建MyRequestParseWrapper類;
[0021]步驟S02:客戶端檢查請求上傳的文件的大小、類型、后綴名是否合法,不合法,返回錯誤提示;合法,則向服務(wù)器發(fā)送上傳文件請求并且開始上傳文件;
[0022]步驟S03:服務(wù)器的structs2配置文件中的bean標(biāo)簽配置和constant標(biāo)簽配置調(diào)用MyRequestParseWrapper類,使服務(wù)器不執(zhí)行任何存儲文件流的操作,然后將文件流請求直接轉(zhuǎn)到action, action檢查請求上傳的文件的大小、類型、后綴名是否合法,不合法即返回錯誤提示;合法,action將文件流存為臨時文件并將臨時文件的臨時存放路徑保存在緩存中,接著,action將臨時文件保存到臨時存放路徑對應(yīng)的服務(wù)器相應(yīng)的位置上,此時,提交上傳文件的客戶端可以實時的根據(jù)臨時存放路徑獲取到文件已上傳的大小,進(jìn)而就可以轉(zhuǎn)化成進(jìn)度展示;
[0023]步驟S04:對文件進(jìn)行重命名,將文件統(tǒng)一存儲為安全的后綴名文件,若上傳請求的原文件名如果需要保存,則與新文件名對應(yīng)保存在數(shù)據(jù)庫中,供需要時獲取;這種方式就是文件的剪切操作,具體代碼實現(xiàn)流程就是將臨時文件數(shù)據(jù)讀出然后輸出到另一個文件中,然后刪除原文件,目的就是去除文件中綁定的惡意代碼,解析文件時也不會按照其他格式解析。
[0024]以下對步驟SOl至步驟S03作進(jìn)一步的說明如下:
[0025]在上傳文件的時候,structs2封裝request (文件上傳請求)對象其實org.apache.struts2.dispatcher, multipart.MultiPartRequest,也就是說在 action 中拿至丨J的實際類型是MultiPartRequestWrapper,此時action拿到對象時文件已經(jīng)被保存,所以,為了不讓structs2解析上傳的文件,在structs2配置文件中需要添加bean標(biāo)簽配置和constant標(biāo)簽配置,覆蓋structs2原有自帶的配置,不用更改struct2的jar包文件,重寫 struts2 的 request 這個封裝類 org.apache.struts2.dispatcher, multipart.MultiPartRequest,即新建MyRequestParseWrapper類,該類中有個功能是保存臨時文件的 parse 方法,MyRequestParseffrapper 繼承原有 JakartaMultiPartRequest 的其他方法,然后重寫parse方法,讓服務(wù)器不執(zhí)行保存臨時文件,這樣后臺action獲取到的request就是帶有上傳文件的了,系統(tǒng)就會自動調(diào)用MyRequestParseWrapper類,如下為MyRequestParseffrapper 類的不例:
[0026]
public class MyRnquestParsnWrapper extends JakartaMul t.1 PartRoqnest {
public void parse(HttpServletRequest servlclRcqucst, StringsaveDir)
throws IOException {
/7什么也不做
}
}
[0027]如下為bean標(biāo)簽配置和constant標(biāo)簽配置調(diào)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]應(yīng)該注意到并理解,在不脫離后附的權(quán)利要求所要求的本發(fā)明的精神和范圍的情況下,能夠?qū)ι鲜鲈敿?xì)描述的本發(fā)明做出各種修改和改進(jìn),因此,要求保護(hù)的技術(shù)方案的范圍不受所給出的任何特定示范教導(dǎo)的限制。
【權(quán)利要求】
1.一種基于Struts2架構(gòu)的文件上傳安全控制方法,其特征在于,其包括以下步驟:步驟SOl:在服務(wù)器的structs2配置文件中需要添加bean標(biāo)簽配置和constant標(biāo)簽配置覆蓋structs2原有自帶的配置,以及新建MyRequestParseWrapper類; 步驟S02:客戶端檢查請求上傳的文件的大小、類型、后綴名是否合法,不合法,返回錯誤提示;合法,則向服務(wù)器發(fā)送上傳文件請求并且開始上傳文件; 步驟S03:服務(wù)器的structs2配置文件調(diào)用MyRequestParseWrapper類,使服務(wù)器不執(zhí)行任何存儲文件流的操作,然后將文件流請求直接轉(zhuǎn)到action, action檢查請求上傳的文件的大小、類型、后綴名是否合法,不合法,返回錯誤提示;合法,action將文件流存為臨時文件并將臨時文件的臨時存放路徑保存在緩存中,接著,action將臨時文件保存到服務(wù)器中與臨時存放路徑對應(yīng)的位置上,此時,提交上傳文件的客戶端可以實時的根據(jù)臨時存放路徑獲取到文件已上傳的大小,進(jìn)而就可以轉(zhuǎn)化成進(jìn)度展示; 步驟S04:對文件進(jìn)行重命名,將文件統(tǒng)一存儲為安全的后綴名文件,若上傳請求的原文件名如果需要保存,則與新文件名對應(yīng)保存在數(shù)據(jù)庫中,供需要時獲取。
【文檔編號】H04L29/06GK103731430SQ201410009598
【公開日】2014年4月16日 申請日期:2014年1月9日 優(yōu)先權(quán)日:2014年1月9日
【發(fā)明者】董再越, 鄧銘, 田志宏 申請人:北京哈工大計算機(jī)網(wǎng)絡(luò)與信息安全技術(shù)研究中心, 湖南合天智匯信息技術(shù)有限公司, 北京合天智匯信息技術(shù)有限公司