Php 仅允许某些域能够加载iFrame

Php 仅允许某些域能够加载iFrame,php,javascript,iframe,Php,Javascript,Iframe,我正在为慈善机构制作一些小部件。由于一些logo授权的错误,我必须找到一些方法,只允许白名单上的站点运行代码,或者发送错误消息(或者类似的东西),而不是小部件 我们必须使用iFrame,因为有相当多的网站已经嵌入了它们。 理想情况下,PHP解决方案最好,但如果需要,JS也可以 所以,一行;我可以检查iFrame所在的域并发送不同的内容吗? 我想知道能做到这一点的可能性有多大…您可以使用HTTP\u REFERER头 <?php $allowed_domains = array(

我正在为慈善机构制作一些小部件。由于一些logo授权的错误,我必须找到一些方法,只允许白名单上的站点运行代码,或者发送错误消息(或者类似的东西),而不是小部件

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

所以,一行;我可以检查iFrame所在的域并发送不同的内容吗?


我想知道能做到这一点的可能性有多大…

您可以使用HTTP\u 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\u domains
。HTTTP\u REFERER头可以被欺骗吗?如果是,依赖此标题将不安全。此解决方案仅适用于一次页面加载。当您在iframe(更改页面)中执行某些操作时,引用程序将是应用程序本身,而不是承载iframe的应用程序。@ramkumar referer header欺骗需要用户自己执行操作。我可以使用伪造的Referer头向服务器发出请求,但我不能让其他人的浏览器发送伪造的头。@MikeGarcia您也可以将托管域本身列入白名单。因此,允许任何进一步的导航。