仅允许某些域能够加载 iFrame

Posted

技术标签:

【中文标题】仅允许某些域能够加载 iFrame【英文标题】:Allow only certain domains being able to load an iFrame 【发布时间】:2011-02-16 10:03:29 【问题描述】:

我正在为慈善机构制作一些小部件。由于某些徽标许可问题,我必须找到一些方法,只允许白名单网站运行代码,或者发送错误消息(或类似内容)而不是小部件。

我们必须使用 iFrame,因为相当多的网站已经嵌入了 iFrame。 理想情况下,最好使用 php 解决方案,但如果需要,也可以使用 JS。

所以,一个班轮;我可以检查 iFrame 所在的域并向其发送不同的内容吗?

我想知道能够做到这一点的机会有多大......

【问题讨论】:

【参考方案1】:

您可以使用 HTTP_REFERER 标头。

<?php

$allowed_domains = array(
        'a-good-domain.com',
        'another-nice-one.org',
        );

$allowed = false;
foreach ($allowed_domains as $a) 
    if (preg_match("@https?://$a/.*@", $_SERVER['HTTP_REFERER'])) 
        $allowed = true;
     


if ($allowed) 
    echo "Nice domain";
else
    echo "Ugly domain";

【讨论】:

你真的应该为此使用哈希。不需要这样循环$allowed_domains HTTTP_REFERER 标头可以被欺骗吗?如果是,则依赖此标头是不安全的。 此解决方案仅适用于一页加载。当您在 iframe(更改页面)中执行某项操作时,引用者将是应用程序本身,而不是托管 iframe 的那个。 @ramkumar Referer 标头欺骗需要用户自己采取行动。我可以向带有欺骗性的 Referer 标头的服务器发出请求,但我不能让其他人的浏览器发送伪造的标头。 @MikeGarcia 您还可以将托管域本身列入白名单。因此允许任何进一步的导航。

以上是关于仅允许某些域能够加载 iFrame的主要内容,如果未能解决你的问题,请参考以下文章

在 iframe 中跨域加载 Angular UI

X-Frame-Options 拒绝加载:不允许跨域框架

允许子 iframe 从不同域调用其父窗口上的函数

从不同域加载和操作我的页面元素

从不同的域操作 iframe

在 iframe 中加载另一个域网站