为什么网站需要引用标头(并且静默失败)?

ref*_*ess 5 http-referer referer

我最近注意到一个非常古怪的趋势,我对此感到困惑。在过去的一两个月里,我开始注意到没有引用标头的网站会崩溃。

作为背景:您当然会记得引用标头被滥用来执行从功能检测到某些误导性的安全外观等一系列事情的古老时代。仍然有一些遗留站点依赖它,但在大多数情况下,引用标头已降级为糟糕的设备检测。

想象一下,当没有一个但三个现代网站在没有推荐人的情况下突然崩溃时,我会感到惊讶。

  1. Codepen:笔预览和整页视图刚刚中断(i.imgur.com/3abXqsC.png)。但编辑器视图完美运行。

  2. Twitter:基本上每个交互功能都会中断。如果您尝试发推、转推、收藏等,您会收到一个通用的无描述性错误 (i.imgur.com/E6tIKFo.png)。如果您尝试更新设置,它只会直接拒绝 (403) (i.imgur.com/51e2d0M.png)。

  3. Imgur:它只是无法上传任何内容 (i.imgur.com/xCWpkGX.png) 并最终放弃 (i.imgur.com/iO2UlR6.png)。

这三个都是现代网站。自从我开始使用 Codepen 以来,它就已经坏了,所以我不确定它是否总是这样,但 Twitter 和 Imgur过去在没有引用的情况下工作得非常好。事实上,我刚刚注意到 Imgur 坏了。

此外,它们都只生成非描述性的错误消息,如果有的话,根本无法识别问题。前两次我花了很多反复试验才弄明白,现在我尝试将引用标头作为第一件事。可是等等!还有更多!解除它们所需要的只是发送一个作为主机根目录的通用引用(即 twitter.com、codepen.io、imgur.com)。您甚至不需要使用带有目录路径的实际 URL!

一个网站,我可以把它归结为糟糕的代码。但是三个主要的现代网站——尤其是当它们过去工作时——是一个巨大的头疼。

有没有其他人注意到这种趋势或知道wtf正在发生?

use*_*740 2

虽然 Referer 标头不会“增加安全性”,但它们可用于删除调用请求的浏览器(按引用规则发挥作用)的尝试。它不会使站点“安全”地免受任何HTTP 尝试的影响,但对于充当代理的浏览器(代表可能毫无戒心的用户运行)来说,它是一个公平的过滤器。

以下是一些可能性:

  1. 可能会防止被劫持(或网络钓鱼)的用户和/或对表单 POSTS(非幂等请求)的其他注入攻击,这些攻击不受同源策略的限制
  2. 某些请求可能会泄漏一些信息,例如同源策略事件
  3. 限制第三方使用嵌入内容,例如 iframe、视频/图像和其他热链接。

也就是说,虽然它绝对不应该被视为最后一道防线(例如,它不应该取代正确的身份验证和 CSRF 令牌),但它确实有助于减少来自浏览器的不良访问的暴露。