保护HTTP引用程序

时间:2017-05-25 12:26:52

标签: http security referrer

我开发的软件将文件存储在具有随机名称的目录中,以防止未经授权的用户下载文件。

我们首先需要将它们存储在一个单独的顶级域中(以防止cookie被盗)。

第二个危险是HTTP referer,它可能会显示秘密目录的名称。

我使用Chrome浏览器进行的实验表明,仅当我单击(秘密)文件中的链接时才会发送HTTP引用。因此,麻烦仅限于可能包含链接的文件(使用Chrome HTML和PDF格式)。我是否可以依赖此行为(不是发送引用是下一页是不是从当前(秘密)页面链接打开,而是使用其他方法,例如直接输入URL)所有浏览器?

所以问题仅限于HTML和PDF文件。但它不是一个完整的安全解决方案。

我怀疑我们可以通过在提供所有秘密文件时添加Content-Disposition: attachment来完全解决此问题。它会阻止HTTP referer吗?

另请注意,我将使用HTTPS为中间人不能下载我们的秘密文件。

2 个答案:

答案 0 :(得分:1)

您可以使用Referrer-Policy标头来尝试控制引用者行为。请注意,这需要clients to implement this

我可以建议您实施正确的身份验证和授权处理,而不是试图隐藏文件位置吗?

答案 1 :(得分:1)

我同意Referrer-Policy是您最好的第一步,但正如DaSourcerer所说,它并非普遍适用于您可能支持的浏览器。

完全服务器端解决方案如下:

  • 用户连接到.../<secret>
  • 服务器生成一次性令牌并重定向到.../<token>
  • 服务器提供文档和无效令牌

现在,引用者将指向.../<token>,这不再有效。然而,这具有可用性权衡:

  • 重新加载页面不起作用(尽管您可以使用Cookie或会话解决此问题)
  • 用户无法从网址栏共享网址,因为它在技术上无效(在某些情况下可能会带来轻微的好处)

通过使用IFRAME而不是重定向执行相同的操作,您可以在没有可用性权衡的情况下获得相同的基本收益。我不确定IFRAME如何影响Referer。

这整个解决方案基本上只是主动完成Referer masking。如果您可以重写文档中的链接,那么您可以在出路时使用Referer masking。 (即重写所有链接,使它们指向https://yoursite.com/redirect/....)因为你提到PDF,我认为这很有挑战性(或者你不想重写文档)。