仅允许某些域能够加载 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的主要内容,如果未能解决你的问题,请参考以下文章