這類漏洞主要是可以讀取用戶傳入路徑名稱采用不正確的過濾方法導致惡意用戶將文件上存到非預期的地方帶來安全隱患
其實我們抓住幾個地方即可我們先來分析下既然用戶要上存文件而且文件將是多種多樣格式可能有的文件內容與用戶傳入格式不一致有的文件內容還夾雜木馬代碼 那麼我們讓用戶上存文件跟站點文件做一個分別授權做隔離
讓保存上存目錄獨立開來目錄權限只讀不能執行
這一步從系統設計加以授權無論你上次什麼文件都不可能執行到就算我不做任何檢測你的文件都上存到這裡了也不會對我系統構成安全(如果有用戶上存一些反動言語的圖片那另外需要處理的)
不直接使用服務器傳入值所有都要進行檢測
這類跟我們做一切輸入都是有害原則一樣對於客戶端傳入的type name 都要進行判斷不直接使用對於要生成到某個目錄某個文件名
文件名最好方法是自己寫死目錄(不要讀取傳入目錄)文件名最好自己隨機生成不讀取用戶文件名文件擴展名可以取最右邊””後面字符
以上個方法剛好從個方面對上存做了整體約束
方法 保存上存文件名按照自己指定目錄寫入並且文件名自己生成的
方法只要保證文件寫對了位置然後從配置上對寫入目錄進行權限控制這個是治本可以做到你無論上存什麼文件都讓你沒有權限跳出去可以運行
以 上個方法一起使用可以保證文件正確存到地方然後權限可以控制 這裡順便說明下 判斷用戶上存文件是否滿足要求類型就直接檢查文件擴展名只要滿足擴展名就讓上存 反正做了執行權限限制你不按要求上存內容也無妨 反正不能執行也不會有多大危害性的
正確步驟
讀取文件名驗證擴展名是不是在范圍內
自己定義生成的文件名目錄擴展名可以來自文件名擴展名 其它值都自己配置不讀取上存中內容
將文件 移到新目錄(這個目錄權限設置只讀)
好了以上是一般操作方法希望對大家有幫助也歡迎朋友們交流!也希望提供更好的方法!接下來我會在web 開發中常見一些方法功能安全設計方面繼續寫一些我的心得看法!
From:http://tw.wingwit.com/Article/program/PHP/201311/20937.html