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

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

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

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

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

【问题讨论】:

    标签: php javascript 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 您还可以将托管域本身列入白名单。因此允许任何进一步的导航。
    猜你喜欢
    • 2013-03-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-07
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多