如何防止其他用户下载/打开其他文件?

时间:2010-10-05 12:30:30

标签: asp.net security iis-7

我正在制作一个小文件托管网站,每个用户都可以上传多个文件,只能访问他的文件,无法访问其他文件,例如猜猜网址。
有没有办法保护文件只能由所有者访问,没有其他人“可能是网站管理员也可以访问”

更新,如果您可以向我展示非常棒的示例,代码示例或演示。

3 个答案:

答案 0 :(得分:5)

您需要将文件存储在IIS不提供的目录中,然后创建一个带有文件ID的脚本,验证用户是否具有访问权限,并返回该文件的内容。

答案 1 :(得分:2)

这取决于这是互联网还是内部Intranet应用程序。如果它是内部的,并使用Windows身份验证或活动目录身份验证,那么您可以使用基于文件的权限保护文件。

如果是外部互联网应用程序,那么您必须开发一些逻辑来保护您的文件。假设您的身份验证非常强大 - 您可以准确地确认用户是他们所说的人。您现在需要的是授权系统 - 确定已识别用户可以访问的内容。

假设您拥有用户101的ID。您可以将101_添加到只有该用户可以访问的文件名的开头。 101_report.pdf fopr示例。您需要编写一些代码来防止提供带有错误ID的文件。 (如果您不希望用户看到它,您可以在完成授权检查后删除101_,或者您可以将所有用户的文件存储在名为101的文件夹中。)

如果您希望多个用户可以访问文件,则必须开发一种将用户链接到文件以及每次显示页面时检查这些链接的方法。如果您可以将用户逻辑分组到将共享给定文件集的真实世界组,您可能还需要考虑组。但是,只有当你真的需要它时才这样做,因为它增加了一个全新的复杂程度。

实现此目的的一种常用方法是将文件作为二进制数据存储在数据库中。如果您使用的是SQL Server,请不要担心数据库变得太大。二进制字段不存储在数据表本身中,因此它们不会影响性能。这将允许您快速查找登录用户可以使用快速数据库连接访问的文件。然后当用户请求特定文件时,在响应流中流出数据(当然,在另一次检查之后 - 你不能太小心)。

答案 2 :(得分:1)

如果每个用户都有自己的文件夹来上传文件,那么您可以使用web.config仅允许验证用户访问自己的文件夹。如果情况并非如此,那么我想你需要在请求者和文件之间放置一个层(数据驱动),以便在提供文件之前验证访问权。