我开发的软件将文件存储在具有随机名称的目录中,以防止未经授权的用户下载文件。
我们首先需要将它们存储在一个单独的顶级域中(以防止cookie被盗)。
第二个危险是HTTP referer,它可能会显示秘密目录的名称。
我使用Chrome浏览器进行的实验表明,仅当我单击(秘密)文件中的链接时才会发送HTTP引用。因此,麻烦仅限于可能包含链接的文件(使用Chrome HTML和PDF格式)。我是否可以依赖此行为(不是发送引用是下一页是不是从当前(秘密)页面链接打开,而是使用其他方法,例如直接输入URL)所有浏览器?
所以问题仅限于HTML和PDF文件。但它不是一个完整的安全解决方案。
我怀疑我们可以通过在提供所有秘密文件时添加Content-Disposition: attachment
来完全解决此问题。它会阻止HTTP referer吗?
另请注意,我将使用HTTPS为中间人不能下载我们的秘密文件。
答案 0 :(得分:1)
您可以使用Referrer-Policy
标头来尝试控制引用者行为。请注意,这需要clients to implement this。
我可以建议您实施正确的身份验证和授权处理,而不是试图隐藏文件位置吗?
答案 1 :(得分:1)
我同意Referrer-Policy
是您最好的第一步,但正如DaSourcerer所说,它并非普遍适用于您可能支持的浏览器。
完全服务器端解决方案如下:
.../<secret>
.../<token>
现在,引用者将指向.../<token>
,这不再有效。然而,这具有可用性权衡:
通过使用IFRAME
而不是重定向执行相同的操作,您可以在没有可用性权衡的情况下获得相同的基本收益。我不确定IFRAME
如何影响Referer。
这整个解决方案基本上只是主动完成Referer masking。如果您可以重写文档中的链接,那么您可以在出路时使用Referer masking。 (即重写所有链接,使它们指向https://yoursite.com/redirect/....
)因为你提到PDF,我认为这很有挑战性(或者你不想重写文档)。