2

我之前在 foo.php 中使用过引用来确定页面 iframe foo.php 是否属于特定 URL。(使用$_SERVER['HTTP_REFERER']

事实证明,在大多数情况下,它都有效(大约 98% 的时间),但似乎有些用户到达了该页面并且$_SERVER['HTTP_REFERER']没有在 foo.php 中设置,因此破坏了代码。[更新:这些用户声称他们遵循通常的页面流程,并没有在浏览器上单独使用 foo.php 的 URL(他们让它成为 iframe),并且用户从未更改过他们的浏览器设置。]

我想知道它可能发生的原因是什么?

4

2 回答 2

6

HTTP/1.1 RFC没有强制发送 HTTP 引用标头。在编写健壮的代码时,你不能对它的存在做出任何假设;完全符合的浏览器可能不包含它。

此外,RFC 建议“如果 Request-URI 是从没有自己的 URI 的源(例如来自用户键盘的输入)获得的,则不得发送 Referer 字段”“我们建议,但不要求, 为用户提供一个方便的切换界面来启用或禁用 From 和 Referer 信息的发送”

后者不是很常见(尽管某些浏览器具有满足要求的“私人”模式)。对于你的 2% 来说,更有可能的是人们将 URL 加入书签,它满足第一个条件(从没有 URI 的源获得的 URI),因此浏览器不发送引用。

于 2009-05-25T18:30:10.283 回答
1

默认情况下不是 AFAIK,但很容易将其关闭(出于隐私考虑),例如在 Firefox 中通过 about:config,当然有些用户可能会使用分发给他们的浏览器(例如由他们的 IT 部门)并使用此类设置。因此,您应该尽量避免依赖 REFERER 来实现任何重要功能(当然,也因为它拼写错误;-)。

于 2009-05-25T18:29:50.593 回答