【问题标题】:Securing Files over Web: Fine Grained Authorization Based File Access通过 Web 保护文件:基于细粒度授权的文件访问
【发布时间】:2010-03-21 14:08:33
【问题描述】:

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

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

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

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

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

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

问题是,我无法控制文件的 URL...所以,如果有人在浏览器的地址栏中键入 img1.jpg 的 URL,则无法知道登录用户是否符合条件查看 img1.jpg。

有什么建议吗?


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

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

谢谢
尼桑特

【问题讨论】:

    标签: security file-security


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 是的,这很整洁。在这种方法中,可能 URL 将具有文件的上下文。像abc.com/downloads/[some-encrypted-key]/img1.jpg 一样,HTTP 处理程序将根据用户凭据和密钥所需的权限推断可访问性。但是机器人仍然可以继续尝试并访问它,尽管概率非常低。我最近在想什么,也许我可以在每个文件上附加一个元数据文件,就像 img1.jpg 有一个文件 img1.md,当用户访问该文件时,处理程序读取元数据并进行验证。但是在包含 100 个文件的页面上读取文件可能会很痛苦。
    • @Nishant - 在您的问题中澄清您使用的是什么平台,以及将访问“下载”的用户是否通过登录验证,我们可以从那里开始。
    • 它是一个 Java 应用程序。但是,Glassfish 有一个单独的实例作为文件服务器工作。由于该应用程序尚未发布,因此我们愿意采用更好的文件访问策略。访问文件的用户可能已登录,也可能未登录。但如果我们知道正在访问的文件是私有文件还是共享文件,我们始终可以通过重定向到登录页面来验证用户身份。
    • 对不起,我没有回来。基本上,是的——我所做的是,创建了一个伪路径并传递了 file-upload-id。应用程序读取文件的权限并验证访问者的有效性。根据有效性检查,它要么流出文件,要么将他带到未经授权的异常页面。
    【解决方案2】:

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

    【讨论】:

    • 是的,这就是我们最终所做的。
    猜你喜欢
    • 1970-01-01
    • 2011-12-20
    • 2020-02-03
    • 2010-10-17
    • 1970-01-01
    • 2018-01-16
    • 2013-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多