如何保护用户上传的文件

时间:2011-10-19 06:41:01

标签: asp.net-mvc security architecture file-upload

我有asp mvc项目。在其中我添加了目录结构:

...
  UserUploads
    User_1
      Images
        Original
        Thumb
        Display
    User_2
    User_n
...

如何让这个文件夹结构对用户不可见?我不希望未经授权的用户通过键入url来查看此图像。每个用户都拥有自己的图像,只有某个用户的“朋友”用户才能看到它的图像。我检查了facebook图片,图片地址如下:

http://a4.sphotos.ak.fbcdn.net/hphotos-ak-ash4/296040_2530953916384_1329592446_32898884_1499197273_n.jpg

那么使用户上传的文件安全的最佳做法是什么?

2 个答案:

答案 0 :(得分:5)

嗯,您可以使用两种方法:

  1. 真正的安全性 - 完全限制对文件夹结构的访问,并仅使用一些HttpHandler(或MVC操作)来为它们提供服务(在评估访问权限之后,通过TransferFile或流编写器将它们写入响应...)。从性能的角度来看,这是非常糟糕的 - 没有缓存,每个图片的整个服务器端处理等。

  2. “混淆”安全 - 只是生成无法猜到的文件名(Guid是很好的候选者),所以没有人无法访问将生成文件名的页面无法直接访问HTML。当然,如果一个“朋友”访问它,然后将文件URL提供给未经授权的人,但他可以轻松地向他发送文件本身...这样性能非常好 - 文件可缓存(由IIS和客户端) ),您的应用程序不必处理图像请求等。

答案 1 :(得分:1)

只需在web.config文件中限制对UserUploadsFolder的访问:

<location path="UserUploads">
    <system.web>
        <authorization>
            <deny users="*"/>
        </authorization>
    </system.web>
</location>