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

Asp.net 如何防止其他用户下载/打开其他文件?,asp.net,security,iis-7,Asp.net,Security,Iis 7,我正在制作一个小型文件托管网站,每个用户都可以上传多个文件,并且只能访问自己的文件,不能访问其他文件,例如通过猜测URL。 是否有一种方法可以确保文件仅由所有者访问,而其他人“可能是网站管理员也有权访问” 更新如果您能向我展示示例、代码示例或演示,那将非常棒。您需要将文件存储在IIS未提供服务的目录中,然后制作一个脚本,该脚本采用文件ID,验证用户是否具有访问权限,并返回文件内容。如果每个用户都有自己的文件夹用于上载文件,则可以使用web.config仅允许该用户访问自己的文件夹。如果不是这样,

我正在制作一个小型文件托管网站,每个用户都可以上传多个文件,并且只能访问自己的文件,不能访问其他文件,例如通过猜测URL。
是否有一种方法可以确保文件仅由所有者访问,而其他人“可能是网站管理员也有权访问”


更新如果您能向我展示示例、代码示例或演示,那将非常棒。

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

如果每个用户都有自己的文件夹用于上载文件,则可以使用web.config仅允许该用户访问自己的文件夹。如果不是这样,那么我想您需要在请求者和文件之间放置一个层(数据驱动),在提供文件之前验证访问。

这取决于这是一个internet还是内部intranet应用程序。如果它是内部的,并且使用windows身份验证或active directory身份验证,则可以使用基于文件的权限保护文件

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

假设您有用户101的id。您可以在只有该用户才能访问的文件名开头加上101。101_report.pdf fopr示例。您需要编写一些代码,以防止发送带有错误id前缀的文件(如果不想让用户看到,您可以在完成授权检查后删除101,或者您可以将用户的所有文件存储在名为101的文件夹中)

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

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