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

问题描述:

我正在制作一个小型文件托管网站,每个用户都可以上传多个文件,并且只能访问他的文件,并且无法访问其他文件,例如通过猜测URL。
有没有一种办法,以确保文件有仅由业主和没有身体其他接入“可能是网站管理员也将有机会获得”如何防止其他用户下载/打开其他文件?

更新,如果你能告诉我例如,代码样本或演示即会很棒。

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

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

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

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

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

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

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