我有一個上傳控件用於發佈圖片的ASP.NET窗體。在服務器上,我加載該圖像(使用Bitmap類)並調整其大小。是否可以加載並調整上傳的圖像的大小?
當用戶上傳惡意或受影響的文件或者代碼是否會在某個時候拋出異常並停止整個過程時,是否有任何危險?
我有一個上傳控件用於發佈圖片的ASP.NET窗體。在服務器上,我加載該圖像(使用Bitmap類)並調整其大小。是否可以加載並調整上傳的圖像的大小?
當用戶上傳惡意或受影響的文件或者代碼是否會在某個時候拋出異常並停止整個過程時,是否有任何危險?
最好的黑客可以希望使用緩衝區溢出攻擊,然後他將惡意代碼寫入服務器內存。但是從我讀過的內容來看,只有在使用不安全的代碼時纔會發生這種情況,並且由於Bitmap是完全管理的,所以我確信它可以安全地使用它。但是,真正聰明的黑客可以欺騙位圖並創建「自定義」圖片文件,該文件將是完全有效的圖片,但也會包含「hitchhiker」代碼,這些代碼在瀏覽器中使用某些未來漏洞利用時可能會造成損害。最安全的方法是將Bitmap本身保存到磁盤而不是原始上傳文件,這意味着使用bitmap.Save方法而不是HttpPostedFile的SaveAs方法。這樣,任何額外的代碼都將被省略,因爲Bitmap不會加載它,您的訪問者將會很安全。
順便說一句,您可以將上傳的文件存儲在網站根文件夾之外,並創建「代理」文件從文件夾中讀取:這樣用戶將無法直接瀏覽圖像,必須使用代理文件。如果您在某個時間點添加權限機制,這非常有用,例如用戶A不應該能夠看到用戶B上傳了什麼。
我想:
確保上傳的文件絕對是一個圖像,使人們不能上傳任意東西 - 但你可能有一個覆蓋着他Bitmap類。
重新命名文件,一旦上傳,所以有人上傳不知道他們創建的文件名。
確保上傳目錄的權限最小。
確保無法在瀏覽器中查看上傳目錄的內容。
我們重命名文件,但它們是公開託管的,因爲我們顯然需要在某個時間點顯示它們。顯然,我想避免惡意文件將其上傳到上傳文件夾。我們還檢查HttpPostedFile類的內容類型。 – Koen 2010-10-29 12:48:22
謝謝,我們已經使用Bitmap類來調整圖像大小,以便通過它們保存... – Koen 2010-11-02 09:03:02
乾杯,所以據我所知,你沒有危險。 :) – 2010-11-02 10:19:16