關於Asp.Net中FileUpload控制項屬性PostedFile.ContentType的提示

來源:互聯網
上載者:User

PostedFile.ContentType這個屬性通常用來判斷上傳檔案的MIME類型,我們通常以此來拒絕某些類型的上傳,比如僅允許上傳影像檔,然而這個屬性其實是很不穩定的:

 

MIME類型沒有統一

假如我們希望僅允許上傳jpg檔案,那麼通常做法就是判斷上傳檔案的ContentType是否為“image/jpeg”,不是則拒絕,著看起來很簡單,但是實際上這個網站通過Chrome瀏覽和使用時不會有問題,但使用IE(測試時使用的是IE8)上傳jpg檔案就會遭拒了,經過調試,發現IE上傳時的ContentType是“image/pjpeg”。

這還僅限於兩個瀏覽器、一種檔案格式的情況,如果是多家瀏覽器多種檔案格式的話,要兼顧就有得頭疼了。

在我簡單的幾下測試中,發現的其他區別有:

  • png檔案Chrome提交的ContentType為image/png,而IE提交為image/x-png
  • zip、rar、msi等檔案使用Chrome提交的ContentType都為null,IE可以正確擷取

 

可靠性與安全性低

由上一個問題很容易就想出:MIME類型完全是由用戶端說了算的

而既然是用戶端的東西,那就是不可信的,因為使用者完全可以使用非主流瀏覽器或是惡意程式進行欺騙。

比如將可執行檔偽裝為映像的MIME騙過服務端的檢查,而如果你正好在服務端儲存時仍保留了原檔案的副檔名的話,就非常危險了。

(比如通過欺騙上傳了一個aspx檔案,然後就可以通過訪問其url直接執行了)

 

結語

為今除了這個屬性之外,還是沒有什麼更好的方法來擷取上傳檔案真實類型的,所以只能繼續使用,但要記住需在相容性和安全性兩方面多下功夫,否則會很鬱悶。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.