2012-08-10 23 views
6

我想有一個文件類型的白名單,用戶有權上傳到我的IIS服務器(即時通訊使用IIS v7.5)。如何限制/驗證IIS上的文件上傳文件類型服務器端

我有什麼選擇?例如,限制文件大小5MB的在我的控制器中的具體行動,我加入這個部分我的webconfig:

<location path="home/fileupload"> 
    <system.web> 
    <!-- maxRequestLength is in kilobytes (KB) --> 
    <httpRuntime maxRequestLength="5120" /> <!-- 5MB --> 
    </system.web> 
    <system.webServer> 
    <security> 
     <requestFiltering> 
     <!-- maxAllowedContentLength is in bytes --> 
     <requestLimits maxAllowedContentLength="5242880"/> <!-- 5MB --> 
     </requestFiltering> 
    </security> 
    </system.webServer> 
</location> 

有沒有在webconfig的選項來設置文件類型允許的白名單?或者唯一的選擇是在文件完全上傳時驗證代碼中的文件類型?什麼是推薦的技術?我怎樣才能確定.docx,.pdf,.jpg等真的是他們是什麼?

+0

有沒有理由不在客戶端驗證它? – 2012-08-14 01:40:43

+1

,因爲這不是所有支持此功能的瀏覽器,也是因爲無論如何,所有事情都應該經過服務器端驗證! – 2012-08-14 02:56:06

+0

@AlexandreJobin您確定該文件是用戶說的是什麼? – Jared 2012-08-18 20:01:26

回答

3

既然你想要服務器端,你可以使用MIME類型的文件。

THIS後顯示如何確定(通過擴展,而不是),基於文件內容的MIME類型。

如果你想限制輸入到特定的文件擴展名,你可以簡單地檢查輸入名稱與你想接受的內容。如果通過,您可以在鏈接的帖子中對圖書館進行外部參照,以確保用戶不會只更改您的文件擴展名。

這樣做將提供一個很好的度的把握,該文件是要接受一個!

編輯:基於迄今爲止的評論.... 根據你說的你正在尋找這種方法應該適合你的工作很好。我的建議,如果你只是想把它限制在其中一個評論中列出的文件類型...做一個簡單的文件擴展名檢查。如果有效,則將該文件傳遞給鏈接中列出的urlmon.dll。確保它不會作爲無效類型返回....又名可執行文件/ java/zip/etc。如果它不是一個無效的類型,那麼你將有一個非常高的確定性,它是一個安全的文件!

最後,閱讀關於該帖子的評論,它看起來像urlmon.dll可能支持隱含的所有文件類型,這將消除檢查它不是可執行文件或此類性質的需要,而是您將需要確認doc/docx/xsl/xslx是否返回有效的MIME類型。

0

數據Anotations是你在找什麼,這裏是一個搜索,可以幫助你,google data anotaions

更新

我認爲它驗證過的文件擴展名。如果你不想依賴file extensions,我認爲你最好的選擇是驗證MIME types。這更復雜,因瀏覽器而異,並且可能是僞造的(儘管這比僞造擴展更復雜。)

一個簡單但不是免費的選項是使用Telerik RadAsyncUpload

您可以編寫自己的代碼(雖然我從來沒有與它弄亂)this可以讓你開始。 (這篇文章涉及的事實,你不能可靠地檢測MIME類型沒有IIS,但它應該讓你對你的方式。)

希望這將讓你去。如您所知,您可以按文件大小限制文件,通過擴展名進行驗證,如果您通過MIME類型添加驗證,我認爲您已盡全力。我認爲這是你可以做的所有事情,以確保安全,而不是排除有效的文件;儘管我聽說過散列文件和其他一些選項;但是這些將會絕對排除合法文件。

而且,正如我所說,MIME類型可以是假貨,併發送至您的服務器,是額外的安全,你應該確認雙方的客戶端和服務器端。

+0

會將數據註解檢查的有效性的文件或只是檢查文件擴展名? – Jared 2012-08-18 19:59:45

+0

@Jared查看我的更新。 – 2012-08-18 20:35:31

+0

RadAsyncUpload將過濾文件擴展名,所以這是我可以在服務器端和客戶端輕鬆完成的事情。我正在使用他們的控件的MVC版本:) – 2012-08-19 00:35:33

1

不,沒有web.config設置來限制上傳的內容。 驗證上傳數據的唯一可能方法是實際驗證代碼中的數據。

即使有一個設置,那就無論如何,因爲它會根據內容類型從客戶端,這是相當錯誤的接收的頭是無用的。

在代碼中,您當然可以查看Content-Type標題,但是如果您要驗證上傳的數據是特定類型的,則必須手動執行此操作,具體取決於您期望的數據類型。對於圖像來說,這很容易。對於其他文件類型,它可能會更難。

+0

那麼驗證文件的技術是什麼?你知道一個好的庫可以驗證文件的真實類型嗎? – 2012-08-18 13:16:20

+0

這取決於文件。沒有神奇的解決方案來驗證所有類型的文件。你想與哪種文件合作? – dodexahedron 2012-08-18 14:23:18

+0

對於我的實際項目,我需要驗證pdf,doc,docx,xl​​s,xlsx,圖像。我將不會有任何視頻或音頻。只能打印文件。 – 2012-08-19 00:37:18

相關問題