像 $ENV{'HTTP_REFERER'} 一样简单吗?或者还有什么我需要做的吗?
示例:我的网站:sample.php
带有 iFrame 的呼叫站点:somesite.com
我希望 sample.php 在加载时能够使用“somesite.com”作为变量输入。
像 $ENV{'HTTP_REFERER'} 一样简单吗?或者还有什么我需要做的吗?
示例:我的网站:sample.php
带有 iFrame 的呼叫站点:somesite.com
我希望 sample.php 在加载时能够使用“somesite.com”作为变量输入。
内联框架和普通页面没有区别。并且最初加载内联框架src
将发送 HTTP 引用。
首先,您的页面不能依赖于引用者的存在或正确性:它是由浏览器发送的信息,并且可以:
有关更多信息,请参阅,例如:
这些帖子都“同意”我的观点^^
现在,您最终可以使用它来添加一些功能;但是您不能依赖它来使您的网站正常工作;-)
要获得真正可靠的访问父 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'];
正如 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。