c# - MVC 3,防止人们通过 URL 在服务器上浏览

标签 c# asp.net-mvc asp.net-mvc-3 web-config

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

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

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

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

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

最佳答案

第一步是将这些文件放入一个不可公开访问的文件夹中。例如 App_Data。或者一个完全在应用程序根目录之外的文件夹。然后,您可以将文件组织到每个用户的文件夹中。所以每个用户都会有自己的子文件夹。然后您可以编写一个 Controller 操作,您将只向其传递文件名,并且根据当前经过身份验证的用户将服务器提供正确的文件。

[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" })

关于c# - MVC 3,防止人们通过 URL 在服务器上浏览,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016479/

相关文章:

c# - 使用 C# 在 dataGridView 中显示位图

c# - 返回字符串时,Database.AddOutParameter 中的 Size 参数使用什么?

c# - Extended Controller 构造函数没有 User 的实例

asp.net - User.Identity 与 Thread.CurrentPrincipal.Identity?

c# - Tesseract OCR 水平读取而不是垂直读取 C#

c# - ServiceStack ORMLite 保存嵌套【引用】

c# - 创建连接字符串并使用 SQL Server LocalDB

ASP.NET MVC 3,部分接收 JSON 作为字典?

asp.net - asp.net MVC3 中自动生成的表单

c# - 一个 View 上的登录和注册表单 MVC3 Razor