新聞中心
1. 前言

成都做網(wǎng)站、成都網(wǎng)站制作服務(wù)團(tuán)隊(duì)是一支充滿著熱情的團(tuán)隊(duì),執(zhí)著、敏銳、追求更好,是創(chuàng)新互聯(lián)的標(biāo)準(zhǔn)與要求,同時(shí)竭誠(chéng)為客戶提供服務(wù)是我們的理念。成都創(chuàng)新互聯(lián)公司把每個(gè)網(wǎng)站當(dāng)做一個(gè)產(chǎn)品來(lái)開(kāi)發(fā),精雕細(xì)琢,追求一名工匠心中的細(xì)致,我們更用心!
文件上傳在日常開(kāi)發(fā)中十分常見(jiàn),但是潛在的安全問(wèn)題非常容易忽視。一旦開(kāi)發(fā)中忽視了這些問(wèn)題,將會(huì)引發(fā)系統(tǒng)安全漏洞。
2. 文件上傳開(kāi)發(fā)的安全建議
通常我們上傳的文件是由客戶端控制的,這種情況下就給了不懷好意人可乘之機(jī)。一些危險(xiǎn)的可執(zhí)行腳本將有可能被注入服務(wù)器中去。因此胖哥總結(jié)了以下幾點(diǎn)建議。
文件類(lèi)型過(guò)濾
開(kāi)發(fā)者應(yīng)該有一個(gè)過(guò)濾清單允許上傳的文件類(lèi)型應(yīng)僅限于業(yè)務(wù)功能所需的文件類(lèi)型,在沒(méi)有允許列表過(guò)濾器的情況下,切勿直接接受文件名及其擴(kuò)展名,同時(shí)前端應(yīng)該對(duì)該清單進(jìn)行說(shuō)明。這是一個(gè)必要的步驟,大多數(shù)開(kāi)發(fā)者也做得很好。
文件名稱處理
不能使用原始文件名!這是一個(gè)容易被忽略的問(wèn)題。很多開(kāi)發(fā)者喜歡直接把上傳文件的按照原始文件名進(jìn)行轉(zhuǎn)存。
- // Spring boot 開(kāi)發(fā)中不建議使用這個(gè)來(lái)作為轉(zhuǎn)存的名稱,你應(yīng)該生成一個(gè)新的名稱來(lái)映射此名稱
- String originalFilename = MultipartFile.getOriginalFilename();
這樣是不安全的。雖然大部分/\:<>?字符已經(jīng)被過(guò)濾掉,但是. * % $,這些腳本中的??鸵廊豢梢员话谖募?,所以不能使用原始文件名,你應(yīng)該指定一個(gè)算法來(lái)進(jìn)行重命名,建議使用一種摘要算法來(lái)確定文件名。例如,文件名可以是文件名加上日期的 MD5 哈希。
如果業(yè)務(wù)需要原始文件名的話存儲(chǔ)新的命名和原始名稱的映射即可。
摘要校驗(yàn)
服務(wù)端無(wú)論上傳、修改還是下載文件都需要進(jìn)行摘要校驗(yàn)(MD5、SHA256),以防止文件和預(yù)設(shè)的不一致??蛻舳擞斜匾那闆r下也建議進(jìn)行摘要校驗(yàn)。
限制大小
這一點(diǎn)如果使用 Spring 進(jìn)行開(kāi)發(fā)的話已經(jīng)做了限制,如果該限制不滿足業(yè)務(wù)需要,可以修改,但是不能移除限制,否則會(huì)導(dǎo)致拒絕服務(wù)攻擊。
訪問(wèn)限制
如果不是業(yè)務(wù)需要,只有身份驗(yàn)證和授權(quán)的用戶才能使用文件上傳功能。不然你的系統(tǒng)就成了別人的免費(fèi)圖床。
行為審計(jì)
對(duì)于安全我們只能被動(dòng)防御,因此對(duì)文件上傳的操作建議有審計(jì)日志、而且審計(jì)日志不應(yīng)該受文件系統(tǒng)影響,這樣發(fā)生安全事件時(shí)可以快速定位問(wèn)題。
3. 總結(jié)
其實(shí)還有不少的安全要點(diǎn)需要考慮,只不過(guò)目前大部分都使用了第三方存儲(chǔ),如果使用自研的系統(tǒng)可能需要考慮的更多。不過(guò)針對(duì)普通開(kāi)發(fā)來(lái)說(shuō)做到上面的幾點(diǎn)就夠了。
本文轉(zhuǎn)載自微信公眾號(hào)「 碼農(nóng)小胖哥」,可以通過(guò)以下二維碼關(guān)注。轉(zhuǎn)載本文請(qǐng)聯(lián)系碼農(nóng)小胖哥公眾號(hào)。
文章題目:開(kāi)發(fā)文件上傳功能稍不注意就會(huì)引發(fā)安全漏洞
URL地址:http://m.fisionsoft.com.cn/article/ccsgcdo.html


咨詢
建站咨詢
