0

像 $ENV{'HTTP_REFERER'} 一样简单吗?或者还有什么我需要做的吗?

示例:我的网站:sample.php

带有 iFrame 的呼叫站点:somesite.com

我希望 sample.php 在加载时能够使用“somesite.com”作为变量输入。

4

4 回答 4

5

内联框架和普通页面没有区别。并且最初加载内联框架src将发送 HTTP 引用。

于 2009-08-26T08:40:21.147 回答
3

首先,您的页面不能依赖于引用者的存在或正确性:它是由浏览器发送的信息,并且可以:

  • 被禁用(例如,某些防火墙/防病毒软件会删除该信息 - 或以前做过)
  • 或被更改/伪造(例如,如果您搜索一下,必须有一些 Firefox 扩展程序可以让您很容易地伪造它)


有关更多信息,请参阅,例如:

这些帖子都“同意”我的观点^^


现在,您最终可以使用它来添加一些功能;但是您不能依赖它来使您的网站正常工作;-)

于 2009-08-16T17:35:38.410 回答
1

要获得真正可靠的访问父 URL 的方法,您可以在嵌入父 URL 时将 GET 参数添加到包含父 URL 的 iframe src。您可以使用 Javascript 将其与嵌入一起自动添加。

<body>这是一个在标签末尾嵌入 iframe 的示例:

var iframe = document.createElement('iframe');
iframe.src = '/sample.php?parent=' + window.location;
document.body.appendChild(iframe);

然后,您可以通过以下方式从 PHP 可靠地访问父 URL:

$parent_url = $_GET['parent'];
于 2009-08-26T09:28:06.637 回答
0

正如 Pascal MARTIN 所提到的,您不应该绝对信任 Referer 值。

扩展 Gumbo 的答案:由于 Referer 作为 HTTP 请求中的标头传输,因此在加载的脚本中<iframe>检索它与为任何其他脚本检索它完全相同。

当浏览器请求由 中的src属性指定的页面时,<iframe>它将像对任何其他资源一样提交 HTTP 请求,并将包含Referer标头值。

标头的值Referer将包含托管<iframe>. 因此,如果您有一个名为page-with-iframe.php的 PHP 脚本,它包含<iframe src="sample.php" />sample.php的 HTTP 请求,可能看起来像:

GET /sample.php HTTP/1.1
Host: somesite.com
...
Referer: http://somesite.com/page-with-iframe.php

sample.php中,您将使用它$ENV{'HTTP_REFERER'}来检索值,然后您可以从那里解析出热名称somesite.com

于 2009-08-26T09:14:54.557 回答