文件上傳漏洞及解決方法
文件上傳漏洞指用戶上傳了一個可執行的腳本文件,并通過此腳本文件獲得了執行服務器端命令的能力
文件上傳后常見的安全問題:
1.上傳的文件是web腳本語言,服務器的web容器解釋并執行了用戶上傳的腳本 導致代碼執行
2.上傳文件是flash的策略文件 crossdomain.xml,黑客用以控制Flash在該域下的行為
3.上傳文件是病毒,病毒文件,黑客用以誘騙用戶或者管理員下載執行
4.上傳文件是釣魚圖片或為包含了腳本的圖片,在某些版本的瀏覽器中會被作為腳本執行,被用于釣魚和欺詐
在大多數情況下,文件上傳漏洞一般都指"上傳Web腳本能夠被服務器解析"的問題,也是通常所說的webshell的問題,要完成這個攻擊,要滿足如下幾個條件:
1.上傳的文件能夠被web容器解釋執行,所以文件上傳后所在目錄要是web容器所覆蓋到的路徑
2.用戶能夠從web上訪問這個文件。如果文件上傳了,但用戶無法通過web訪問或者無法使得web容器解釋這個腳本,那也不能稱為漏洞
3.用戶上傳的文件若被安全檢查,格式化,圖片壓縮等功能改變了內容,則也會導致攻擊不成功
設計安全的文件上傳功能
1.文件上傳的目錄設置為不可執行
只要WEB容器無法解析該目錄下的文件,即使攻擊者上傳了腳本文件,服務器本身也不會受到影響,在實際應用中,很大大型網站的上傳應用,文件上傳后會放到獨立的存儲上做靜態文件處理,一方面方便使用緩存加速,降低性能損耗,另一方面也杜絕了腳本執行的可能
2.判斷文件類型
判斷文件類型的時候的時候,可以結合使用MIME Type,后綴檢查方式,文件類型檢查中,推薦使用白名單方式,黑名單不可靠,對于圖片的處理,可以使用壓縮文件或者resize函數,在處理圖片的同時破壞圖片中包含的HTML代碼
3.使用隨機數改寫文件名和文件路徑
文件如果要執行代碼,則需要用戶能夠訪問到這個文件,如果應用使用隨機數改寫文件名和路徑,將極大的增加攻擊的成本,與此同時,像shell.php.rar.rar 這種文件,或者是crossdomain.xml這種文件,都將因為文件名被改寫而無法成功實施
4.單獨設置文件服務器的域名
由于瀏覽器同源策略的關系,一系列服務器攻擊將失效