2

我有一个系统,员工可以上传文件。有三种方式

以公共、私人或保护模式上传到我的帐户 以公共、私人或保护模式
上传到部门帐户 以公共、私人或保护模式
上传到组织帐户

公开对任何人可见,仅对组或个人私有,对组织中的任何人都受保护。

组织的所有文件都存储在文件服务器上的一个目录中,例如 /files/<organizationId>/

文件
+-- 234809
| +img1.jpg
| +doc1.pdf
+-- 808234
| +doc2.pdf

我在数据库中存储文件路径和隐私级别。因此,我可以控制是否在给定页面上向用户显示文件 URL 的链接。

问题是,我对文件的 URL 没有任何控制权......所以,如果有人在他的浏览器地址栏中键入 img1.jpg 的 URL,则无法知道登录用户是否有资格看到 img1 .jpg。

有什么建议吗?


它是一个 Java 应用程序。但是,Glassfish 有一个单独的实例作为文件服务器工作。由于该应用程序尚未发布,因此我们愿意采用更好的文件访问策略。

访问文件的用户可能已登录,也可能未登录。但如果我们知道正在访问的文件是私有文件还是共享文件,我们始终可以通过重定向到登录页面来验证用户身份。

谢谢
尼山特

4

2 回答 2

1

您提出了一个有趣的问题,并且您对问题的理解是正确的。

根据提供内容的 IIS 版本,如果内容在您的 vdir 中,您甚至可能没有访问控制。

这种情况的典型解决方案是将文件存储在互联网无法访问的目录中,并使用受保护的 HttpHandler 并将文件流式传输出去。

有几种方法可以解决这个问题,最简单的是将 HttpHandler 映射到不存在的目录,例如 /downloads,然后从 RequestUri 中解析文件名,设置正确的内容类型并将文件写入 Response。

在这种情况下,您的 HttpHandler 受到保护,使您能够确定访问权限。

于 2010-03-21T16:51:04.323 回答
0

您可以将文件存储在公用文件夹之外,并有某种路径来捕获任何从组织请求文件的 URL。然后,您可以以编程方式提供文件,而不是让您的 Web 服务器在没有任何控制的情况下执行此操作。

于 2010-03-21T16:54:30.643 回答