2

我今天刚刚用我的新服务器尝试了一些东西,我发现我在 MVC 应用程序中所做的事情有一个很大的缺陷。

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

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

他们可以查看任何人员文件夹并以任何他们想要的方式浏览服务器。

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

4

2 回答 2

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" })
于 2012-04-04T17:47:05.027 回答
2

假设您有一个将 URL 转换为文件名的 UploadController,请在显示之前验证登录用户是否有权查看该控制器中的文件。

于 2012-04-04T17:47:46.820 回答