1

这是本问题的后续内容,关于控制可以在哪些站点上对页面进行 iframe。

我想使用接受的答案,但是当点击 iframe 内的链接时,引用者会被报告为承载框架内容的域。如果网站不在框架内,是否有防止网站显示的服务器端方法?(阿帕奇,php5)

这是我想要实现的目标:

我的服务器生成一些内容。我们希望与特定的其他网站共享该内容。我们不希望此内容自行显示。如果可能的话,我不想依赖客户端脚本,因为它可以被关闭。(将主体标签或主包装器 div 设置为display: none并没有真正的帮助,因为内容仍然存在,在源代码中。)

4

3 回答 3

1

PHP 不可能知道请求是否来自 iframe 内部,因为它将具有与在顶级窗口中发出的完全相同的形式。

为什么不能使用包含?在这种情况下,有一个简单的解决方案:

if (strcmp(basename($_SERVER['SCRIPT_NAME']), basename(__FILE__)) === 0){
    header("location: index.php");
}

编辑:

我要说的是,使用 iframe,您无法控制来自服务器端的访问。

让我们假设您有您的主页index.php和 iframe 的页面,例如foo.php.

当您<iframe src="foo.php"></iframe>向服务器发出新的 HTTP 请求时,它几乎与对index.php.

使用包含,您只有一个请求。PHP服务器解析请求的参数之一是脚本名称。当您这样做时:GET /index.php HTT/1.1,脚本名称将是index.php.

将我向您展示的代码放在包含的文件中将阻止直接访问它们,您可以通过包含来引用它们。

于 2013-05-15T20:42:12.620 回答
0

我不认为服务器(或服务器端代码)可能知道页面是否显示在 iframe 内。服务器为页面请求提供服务,并且不知道演示文稿。

我认为最接近服务器端解决方案(在 PHP 中)是检查$SERVER['HTTP_REFERER']

如果您绝对必须将对脚本的访问限制在一个框架内,您将需要客户端上的一些东西来检查演示文稿。在javascript中执行此操作的几个解决方案是herehere

于 2013-05-15T20:24:36.200 回答
0

我遇到了同样的问题,解决了这个问题:

$ref = $_SERVER['HTTP_REFERER'];
if($ref == '') {
exit;
}

iframe 的引用者是父窗口的 url,所以如果要 iframe 的页面没有引用者,则不会加载,所以你会想要

于 2017-01-15T14:52:31.317 回答