将虚拟目录映射到App_Data中的子文件夹以提供图像是否安全?

时间:2011-07-18 16:34:53

标签: asp.net asp.net-mvc-3 iis-7

我正在IIS7下运行一个mvc3应用程序。

普通大众可以通过文件上传控件上传图像,文件上传控件会调整图像大小,然后将图像写入App_Data文件夹的子文件夹。

在页面上显示上传的图像时,我无法直接从App_Data子文件夹中提供这些图像,因为出于安全原因,IIS7将其限制为受保护的文件夹。

如果我将虚拟目录映射到App_Data子文件夹,我可以提供存储在那里的图像,但这引出了一个问题 - 这会带来安全风险吗?

据我所知,只要在虚拟目录上设置了正确的权限,那就应该没问题。

这是对的吗?还是有其他我忽视的事情?

1 个答案:

答案 0 :(得分:3)

  

据我所知,只要在虚拟目录上设置了正确的权限,那就应该没问题。

这是对的。如果您确保只有授权用户才能访问此虚拟目录,那么您的文件就非常安全。

但为了避免创建另一个虚拟目录的麻烦,您可以创建一个控制器操作,该操作将直接提供此文件夹中的文件:

// You could specify Roles instead of Users if you wish
[Authorize(Users = "john, jane")] 
public ActionResult AppDataFile(string filename)
{
    var file = Path.Combine(Server.MapPath("~/app_data"), filename);
    if (!System.IO.File.Exists(file))
    {
        return HttpNotFound();
    }
    return File(file, "application/octet-stream", Path.GetFileName(file));
}

然后当您以jane进行身份验证时,您可以/appdatafile?filename=foo.barApp_Data文件夹下载foo.bar文件。

相关问题