Referer 标头:隐私和安全问题

Referer HTTP 标头 相关的隐私和安全风险。本文将介绍这些风险,并提供有关减轻这些风险的建议。

Referrer 问题

Referer(原文如此)标头包含请求的地址(例如,先前网页的地址,该网页包含指向当前请求页面的链接,或加载图像或其他资源的页面的地址)。这有许多相当无害的用途,包括分析、记录或优化缓存。但是,还有一些更成问题的使用方式,例如跟踪或窃取信息,甚至仅仅是副作用,例如无意中泄露敏感信息。

例如,考虑一个带有页脚中的社交媒体链接的“重置密码”页面。如果链接被点击,根据信息的共享方式,社交媒体网站可能会收到重置密码 URL,并且仍然能够使用共享的信息,这可能会损害用户的安全。

同样,嵌入您页面中的第三方网站的图像可能会导致敏感信息泄露给第三方。即使安全没有受到损害,信息也可能不是用户想要共享的内容。

我们如何解决这个问题?

应用程序的合理设计可以减轻大部分这种风险。合理的应用程序将通过创建一次性密码重置 URL 或将它们与唯一的用户令牌相结合来消除此类风险。还可以通过更安全的方式传输敏感数据来降低风险。

您应该尽可能使用 POST 而不是 GET,以避免通过 URL 将敏感数据传递到其他位置。

您应该始终为您的网站使用 HTTPS。这具有许多安全优势,包括 HTTPS 网站永远不会将 Referrer 信息传输到非 HTTPS 网站这一事实。随着大多数 Web 开始使用 HTTPS,此建议不再那么重要,但仍然值得考虑。

此外,您应该考虑从网站的安全区域(如密码重置页面、支付表单、登录区域等)中删除所有第三方内容(例如,嵌入在 <iframe> 中的社交网络小部件)。

您还可以使用以下方法来减轻此类风险

  • 服务器上的 Referrer-Policy 标头,以控制通过 Referer 标头发送的信息。例如,no-referrer 指令将完全省略 Referer 标头。
  • 有泄露此类信息的风险的 HTML 元素(例如 <img><a>)上的 referrerpolicy 属性。例如,可以将其设置为 no-referrer,以完全停止发送 Referer 标头。
  • 有泄露此类信息的风险的 HTML 元素(例如 <form><a>)上设置为 noreferrerrel 属性。
  • 具有 名称referrer 且内容设置为 no-referrer<meta> 元素,用于禁用整个文档的 Referer 标头。请参阅 Referrer-Policy 与 HTML 的集成
  • 退出页面 技术。

注重安全的服务器端框架往往内置了针对此类问题的缓解措施,例如

政策和要求

为您的项目团队编写一套安全和隐私要求以指定此类功能的使用,以减轻相关的风险,这是合理的。您应该寻求 Web 安全专家的帮助来编写这些要求,并考虑用户的需求和福利,以及立法(如 欧盟通用数据保护条例 (GDPR))强制实施的政策和法规等其他问题。

另请参阅