2011-08-03 30 views
7

我在尋找一個好的解決方案,通過它我們可以防止exe文件上傳到服務器上。如何防止在asp.net中上傳exe文件mvc

如果我們能夠在收到文件時立即讀取文件頭,而不是等待整個文件上傳,那麼最好放棄上載。

我已經實施了擴展檢查,尋找更好的解決方案。

+3

文件標題可僞造。檢查上傳數據的前兩個字節 - 如果它是'MZ',賠率是你有一個可執行文件。 –

+0

重複:http://stackoverflow.com/questions/3635128/validate-file-type-extension – Matthieu

回答

7

有一個如何和何時/何地的一部分。這個過程非常簡單,因爲二進制文件包含一個頭文件,頭文件很容易刪除和檢查。對於Windows文件,您可以查看文章Executable-File Header Format。其他二進制類型使用類似的格式,因此您可以確定允許的類型和不允許的類型。

注意:鏈接的文章用於完整查詢文件。有廉價的,骯髒的,快捷方式,你只能檢查幾個字節。

何時/何處取決於您如何獲取文件。如果您使用的是高度抽象的方法(上傳庫),這是非常正常的,您可能必須先傳輸整個文件,然後才能開始查詢這些位。無論是流入內存還是保存和刪除取決於您的編碼,甚至可能還有庫。如果您控制流式傳輸,您可以在第一個字節(標題部分)中進行流式傳輸,並在中途中止流程。

1

我認爲你可以通過javascript來檢查文件是否以.exe結尾,然後再提交數據並且執行檢查服務器端。

2

上傳數據的第一個訪問點將位於HttpModule中。 從技術上講,如果您手上有一個.exe文件,並且取消上傳,您可以在所有字節發送之前進行檢查。它可能會變得相當複雜,取決於你想採取多遠。

我建議你看看Brettle的NeatUpload的HttpModule。也許它會讓你在如何處理你想要的水平方面處於領先地位。