2012-04-04 63 views
2

我剛剛嘗試了一些與我今天的新服務器有關的事情,並且發現了我的MVC應用程序中完成的一個大缺陷。MVC 3,通過URL阻止服務器上的人browsng

因此,applikation中發生的事情是:人們可以訪問頁面和登錄,當用戶登錄時,他們可以將文件上傳到服務器上自己的文件夾中。然後他們可以在需要時訪問它們。但發現的問題是:如果輸入正確的url,人們可以看到他們想要的任何文件夾。例如:

URl可以命名爲:testnameweb.com/Upload/testUserName/testfilename.png 在這種情況下,輸入url的人可以看到testfilename.png文件。但是,如果同一個人進入: testnameweb.com/Upload/

他們禁毒常務委員會看到任何人的文件夾和瀏覽服務器上他們想要的任何方式。

任何想法如何防止這種情況?

+0

您是否檢查了您正在談論的文件夾上啓用了哪種類型的身份驗證? – NiK 2012-04-04 17:48:27

回答

7

第一步是將這些文件放入不可公開訪問的文件夾中。例如App_Data。或者完全在應用程序根目錄之外的文件夾。然後,您可以將每個用戶的文件整理到文件夾中。所以每個用戶都有自己的子文件夾。然後,您可以編寫一個控制器操作,您將只通過該文件名並根據當前已通過身份驗證的用戶將服務器正確的文件。

[Authorize] 
public ActionResult File(string filename) 
{ 
    string username = User.Identity.Name; 
    // now that you know the currently connected username and the filename 
    // go and find the corresponding file and stream it as a result 
    ... 
} 

,並提供一個鏈接,以便在當前連接的用戶可以瀏覽文件:

@Html.ActionLink("Open foo.txt", "file", new { filename = "foo.txt" }) 
2

假設你有一個UploadController它的URL轉換成文件名,驗證登錄的用戶有權在顯示該控制器之前查看該文件中的文件。