【发布时间】:2011-04-21 06:53:13
【问题描述】:
我正在制作一个小型文件托管网站,每个用户可以上传多个文件,并且只能访问他的文件而不能访问其他文件,例如通过猜测 URL。
有没有办法保护文件只有所有者才能访问,其他人“可能是网站管理员也可以访问”
更新,如果您能向我展示一些很棒的示例、代码示例或演示。
【问题讨论】:
我正在制作一个小型文件托管网站,每个用户可以上传多个文件,并且只能访问他的文件而不能访问其他文件,例如通过猜测 URL。
有没有办法保护文件只有所有者才能访问,其他人“可能是网站管理员也可以访问”
更新,如果您能向我展示一些很棒的示例、代码示例或演示。
【问题讨论】:
您需要将文件存储在 IIS 不提供服务的目录中,然后编写一个脚本,该脚本采用文件 ID,验证用户是否具有访问权限,并返回文件的内容。
【讨论】:
如果每个用户都有自己的文件夹来上传文件,那么您可以使用 web.config 仅允许该验证用户访问他们自己的文件夹。如果不是这种情况,那么我想您需要在请求者和文件之间放置一个层(数据驱动),以在提供文件之前验证访问。
【讨论】:
这取决于这是 Internet 还是内部 Intranet 应用程序。如果它是内部的,并且使用 windows 身份验证或活动目录身份验证,那么您可以使用基于文件的权限来保护文件。
如果它是一个外部互联网应用程序,那么您将不得不开发一些逻辑来保护您的文件。假设您的 Authentication 是可靠的 - 您可以准确地确认用户就是他们所说的那个人。您现在需要的是授权系统 - 确定已识别用户可以访问什么的东西。
假设您有一个用户 101 的 ID。您可以将 101_ 添加到只有该用户可以访问的文件名的开头。 101_report.pdf 示例。您需要编写一些代码来防止提供以错误 ID 为前缀的文件。 (如果您不希望您的用户看到它,您可以在完成授权检查后删除 101_,或者您可以将所有用户的文件存储在一个名为 101 的文件夹中)。
如果您希望多个用户可以访问文件,则必须开发一种将用户链接到文件并在每次显示页面时检查这些链接的方法。如果您可以在逻辑上将用户分组到将共享给定文件集的真实组中,您可能还需要考虑组。但只有当你真的需要它时才这样做,因为它增加了一个全新的复杂程度。
实现这一点的一种常见方法是将文件作为二进制数据存储在数据库中。如果您使用的是 SQL Server,请不要担心您的数据库会变得太大。二进制字段不存储在数据表本身中,因此它们不会影响性能。这将允许您做的是非常快速地查找登录用户可以使用快速数据库连接访问哪些文件。然后在用户请求特定文件时将数据流式传输到响应流中(当然要经过另一次检查 - 你不能太小心)。
【讨论】: