【问题标题】:asp.net MVC secure root folder only for authorized usersasp.net MVC 安全根文件夹仅供授权用户使用
【发布时间】:2015-11-13 13:13:29
【问题描述】:

我有这个小型的外联网服务,用户可以在其中登录、获取各种信息并下载少量文件。

是否可以保护 MVC asp.net 项目中的根文件夹?我有一个项目,用户必须在使用任何材料之前登录。但是,如果我为每个 pdf、jpg 等文件使用例如“/material”文件夹,其他未经授权的用户也可以看到这些文件。

例如,如果键入 www.example.com/material/pdf-file.pdf,每个人都可以看到这个文件,所以我只希望授权/登录的用户看到这个文件。这可能吗?

【问题讨论】:

    标签: c# asp.net asp.net-mvc security authorization


    【解决方案1】:

    我设法让它工作。这是我的做法。

    我首先将这一行添加到 Web.config 文件中:

    <system.webServer>
        <modules runAllManagedModulesForAllRequests="true">
    

    这允许 .pdf、.png 等中的点字符在 url 中。

    我在 RouteConfig.cs 中为控制器添加了新路由。

    routes.MapRoute(
                name: "Material",
                url: "Material/Download/{file}",
                defaults: new { controller = "Material", action = "Download", file = UrlParameter.Optional }
            );
    

    我创建了一个新的控制器“Material”。

    // GET: Material
        [Authorize]
        public ActionResult Download(string file)
        {
            string path = Server.MapPath(String.Format("~/App_Data/Material/{0}", file));
    
            if(System.IO.File.Exists(path))
            {
                string mime = MimeMapping.GetMimeMapping(path);
    
                return File(path, mime);
            }
    
            return HttpNotFound();
        }   
    

    并且还转移了app_data里面的material文件夹。

    这似乎工作得很好。只有授权用户才能访问材料文件夹。

    【讨论】:

      【解决方案2】:

      这是可能的,但有很多方法可以做到这一点。

      一个简化的场景可能是:

      • Disable directory listing on IIS
      • 创建自定义“下载包装器”控制器+操作,以提供这些文件。
      • 然后,无论您在何处创建操作链接,都使用HtmlHelper 生成它们,这会将客户端重定向到“包装器”控制器操作。您可以在参数中传递文件名。
      • 在“包装器”控制器上,您可以使用[Authorize] 属性或更好的属性,而无需在任何可以使用FluentSecurity 处理授权的地方使用此类属性。

      创建“包装”控制器后,用于获取文件的 URL 可能如下所示:

      www.example.com/下载/文件/pdf-file.pdf

      此示例URL 假设 controller 名称为“download”,action 名称为“file”。

      【讨论】:

        猜你喜欢
        • 2015-04-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-14
        • 2016-08-15
        • 1970-01-01
        相关资源
        最近更新 更多