2009-08-14 113 views
2

服務器是IIS7。ASP.NET Web.config問題

有沒有辦法在子文件夾中禁用的Web.config文件?

我在問,因爲我在上傳的Web服務器上有一個文件夾。當某人上傳文件時,將爲用戶的會話創建一個新文件夾,並將他們上傳的文件放入該文件夾中。

所以路徑上傳會是這樣的: 〜/上傳/ 3F2504E0-4F89-11D3-9A0C-0305E82C3301/somefile.txt

在〜/上傳/目錄下有一個web.config文件刪除除靜態文件處理程序之外的所有http處理程序,並添加通配符MIME類型。因此,用戶上傳的每個文件只能靜態提供。

如果用戶上傳web.config文件,我想禁止應用該文件中的任何設置。

我怎樣才能做到這一點?

編輯

我只能上傳文件夾中的應用程序被配置爲在經典模式,而不是綜合管線模式下運行的應用程序池的成員?這樣它甚至不關心web.config文件。

EDIT 2

是否有其他類型的Web服務器,我可以安裝靜態服務於所有的文件?我可以通過不同的端口訪問這些文件。是否有一些我可以肯定不會運行任何腳本的軟件是安全的。

回答

1

好吧,我對此有不同的角度...

如果你的上傳文件夾不是網站的一部分,而是文件系統的一部分?這種方式ASP.NET不處理對文件夾的請求,因此web.config不會被ASP.NET運行時加載。

您必須爲存儲這些文件的文件系統提供您的應用程序池的帳戶讀/寫權限,但我認爲它更適合您要完成的任務。

+0

但是,我需要提供文件夾中的文件。我曾考慮過沒有使用ASP.net服務請求(請參閱我的編輯) – 2009-08-14 16:36:38

+0

您必須添加應用程序的能力才能從文件系統獲取文件並將其傳輸給用戶。你*可以*將文件從文件系統複製到用戶的「暫存」區域,但是你會打開自己的注入式攻擊。 – JMP 2009-08-14 16:37:37

+0

我也曾考慮過這個問題。但我只是想讓IIS做到這一點。 – 2009-08-14 16:40:33

3

我根本不會允許他們上載有該名稱的文件。事實上,我通常不會相信用戶給我的任何文件名......是注入式攻擊的絕佳選擇。

+0

+1用於重新命名文件。如果您想「記住」原始文件名,請將其存儲在其他地方。 – 2009-08-14 16:25:23

+0

我已經想到了。這不能回答我的問題。 – 2009-08-14 16:25:47

0

顯然它可以在代碼來完成。

如果這些文件夾總是存在,您可以預先填充一個沒有(重要)內容和一個ACL的web.config,以確保它不能被覆蓋,但是查看它我懷疑您動態創建上傳文件夾的路徑這意味着這是行不通的。

0

我不相信有一種方法可以告訴IIS不要使用web.config(但我可能是錯的)。就個人而言,我會添加一個支票到我的保存代碼並重命名文件。

0

爲什麼不檢查文件名,首先要防止用戶上傳了一個名爲web.config文件?你可能會想檢查其他的一些東西,允許上傳前 - 這是太大文件等

+0

我想到了這一點。這不能回答我的問題。 – 2009-08-14 16:31:22