为啥网站需要引用标头(并且默默地失败)?

Posted

技术标签:

【中文标题】为啥网站需要引用标头(并且默默地失败)?【英文标题】:Why are websites requiring referer headers (and failing silently)?为什么网站需要引用标头(并且默默地失败)? 【发布时间】:2016-03-18 17:45:18 【问题描述】:

我最近注意到一个非常古怪的趋势,我对此感到困惑。在过去的一两个月里,我开始注意到网站在没有引荐标头的情况下出现故障。

作为背景:您当然会记得在古老的日子里,引用标头被滥用于做一大堆事情,从特征检测到一些被误导的安全外观。仍然有一些旧网站依赖于它,但在大多数情况下,引用标头已被降级为糟糕的设备检测。

想象一下,当不是一个,而是三个现代网站在没有引荐来源的情况下突然崩溃时,我会感到惊讶。

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

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

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

这三个都是现代网站。 Codepen 自从我开始使用它就已经坏了,所以我不确定它是否总是这样,但 Twitter 和 Imgur 过去可以很好地工作,没有推荐人。事实上,我刚刚注意到 Imgur 崩溃了。

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

一个网站,我可以把它归结为糟糕的代码。但是,三个主要的现代网站(尤其是在它们曾经工作的时候)令人头疼。

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

【问题讨论】:

顺便说一句,但是如何将Referer标头用于“功能”或“sh*tty设备检测”?! 【参考方案1】:

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

这里有一些可能性:

    可能会阻止用户被劫持(或网络钓鱼)和/或其他对表单 POST(非幂等请求)的注入攻击,which are not constrained to Same-Origin Policy。 Some requests can leak a little bit of information, event with Same-Origin Policy。 限制第三方使用嵌入内容,例如 iframe、视频/图像和其他热链接。

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

【讨论】:

以上是关于为啥网站需要引用标头(并且默默地失败)?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 MediaElement 有时会默默地失败,我该如何纠正它?

为啥需要访问控制公开标头?

为啥需要访问控制公开标头?

为啥以下代理不绕过 X-Frame-Options 标头?

为啥添加额外的标头会导致 AJAX 调用失败

为啥包含 XML 标头时 C# XmlDocument.LoadXml(string) 会失败?