阻止用户访问图像目录内容

时间:2013-07-28 20:37:11

标签: asp.net-mvc asp.net-mvc-4

我正在使用ASP.NET MVC4创建一个站点,该站点上的一个功能是供用户上传图像。图像可能具有个人性质,几乎肯定包含其子女的图像。

图像存储在MS Azure SQL数据库及其元数据中。为了节省azure上的带宽使用量,一旦下载了图像,它就会保存到用户目录

~/UserImages/<Username>/<Image>

当加载图库页面时,控制器操作会根据用户目录中的内容检查数据库,然后关闭任何尚未存在的页面。

目录的<Username>部分是在需要时由控制器创建的,因此我无法为其设置IIS权限。然而,即使我是,我不确定IIS可以做什么,因为用户事先不知道(新注册等)。

由于MVC路由,用户通过猜测用户名来访问其他用户目录是不可能的,但是如果你能猜出用户名和图像名,那么它就会显示出来。我正在寻找防止这种情况发生的想法,以尽量减少某些人将图像暴露给他人的可能性。

我尝试了IgnoreRoute,但这不起作用。

routes.IgnoreRoute("UserImages/{*pathInfo}");

理想情况下,我会在注销时清除UserImages目录,但不是每个人都会使用logout命令。如果它们被清除,那么在删除文件之前找到用户名和图像名组合的可能性要小得多。

1 个答案:

答案 0 :(得分:1)

如果不将实际网站结构中的缓存图像存储在中作为IIS提供的静态内容,而是将图像存储在网站外的路径中。

这将确保没有未经授权的用户可以直接访问它们。

然后,您可以通过Controller(可能UserImagesController)操作提供对这些图像的访问,该操作可以验证所请求的图像是当前用户可以访问的图像。

您的检查可能最终变得非常简单,只需检查操作的请求的UserName参数与您当前用户的UserName相同。

使用这种方法,您还可以控制这些图像的缓存标头,过期等。