2011-02-07 70 views
3

我有一個頁面,用戶可以上傳一張稍後保存在服務器上的圖片。我通過檢查其名(.jpg,.png等).NET中的圖片上傳驗證

是這樣的驗證足夠的服務器安全做上傳文件的簡單的驗證?或者這是否讓人有機會上傳可能會損害我的服務器的惡意代碼?如果可以驗證上傳的圖像,如何完成?

回答

2

只要最終用戶在服務器上放置了任何東西,就有可能導致惡意行爲。儘管雙擊.jpg圖像不太可能會讓你的盒子滿意,但已知陌生的事情會發生。 (例如,誰知道PDF文件可以包含如此多的安全問題!)

最好的辦法是嘗試實際加載的圖像,看它是否在GDI +庫,將其識別爲一個有效的圖像。如果你沒有得到運行時異常,那麼你知道圖像是'有效的'。但是,如果在GDI +中加載圖像並不會保護您的盒子,那麼這不會保護您。

可以進一步在一個單獨的AppDomain中加載圖像保護自己,但縮小了潛在的威脅。

1

通常你可以讀/檢查MIME類型的文件,通過使用urlmon.dll。看到這個優秀的答案here

這也是個不錯的主意,有在服務器上安裝一個很好的防病毒程序。啓用實時文件系統掃描,並在文件上傳後立即包含最可能的惡意代碼。

1

憑藉該驗證,任何人都可以,只要他們給它,你正在尋找擴展上傳任何東西。漏洞取決於你在做什麼。如果你重新服務他們,接收他們的人可能會受到損害。這需要一些創造力來對他們做一些惡意的事情,但我的直覺說可以做到。

這個答案(Validate image from file in C#)似乎有一些關於以編程方式實際驗證圖像的想法。