MVC 3,通过URL阻止人们在服务器上浏览

Tim*_*sen 2 c# asp.net-mvc web-config asp.net-mvc-3

我刚刚用我的新服务器尝试了一些东西,并且我发现了我在MVC应用程序中所做的一个很大的缺陷.

所以在applikation中发生的事情是:人们可以访问页面和登录,当人们登录时,他们可以在服务器上的自己的文件夹中上传文件.然后他们可以在需要时访问它们.但我发现的问题是:如果输入正确的网址,人们可以看到他们想要的任何文件夹.例如 :

URl可以命名为:testnameweb.com/Upload/testUserName/testfilename.png,在这种情况下输入url的人,可以看到testfilename.png文件.但是,如果同一个人进入:testnameweb.com/Upload/

他们可以看到任何人的文件夹,并以他们想要的任何方式浏览服务器.

知道如何防止这种情况吗?

Dar*_*rov 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
    ...
}
Run Code Online (Sandbox Code Playgroud)

并提供一个链接,以便当前连接的用户可以浏览文件:

@Html.ActionLink("Open foo.txt", "file", new { filename = "foo.txt" })
Run Code Online (Sandbox Code Playgroud)