我正在IIS7下运行一个mvc3应用程序。
普通大众可以通过文件上传控件上传图像,文件上传控件会调整图像大小,然后将图像写入App_Data文件夹的子文件夹。在页面上显示上传的图像时,我无法直接从App_Data子文件夹中提供这些图像,因为出于安全原因,IIS7将其限制为受保护的文件夹。
如果我将虚拟目录映射到App_Data子文件夹,我可以提供存储在那里的图像,但这引出了一个问题 - 这会带来安全风险吗?
据我所知,只要在虚拟目录上设置了正确的权限,那就应该没问题。
这是对的吗?还是有其他我忽视的事情?
答案 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.bar
从App_Data
文件夹下载foo.bar文件。