检查iframe是否来自已批准的域名?

时间:2012-05-18 15:39:20

标签: html iframe execute

  

可能重复:
  How to limit display of iframe from an external site to specific domains only

我想要的是简单的。我想阻止从我不赞成的域名调用我的网站。 假设只有a.com和b.com可以有一个iframe的页面调用我的webapplication wwww.mydomain.com/myapp.php。我怎么能做到这一点?

第一天我在想我的网页应用程序检查iframe父级的域名。也许这是可能的,但肯定不容易,因为跨域限制。

第二部分我想在a.com上使用请求页面,而b.com首先执行一个小的PHP脚本,它将一些信息写入文件或我的数据库,所以我知道请求页面是在批准的一个页面上域。问题是如何调用以及何时执行脚本?

使用src属性放置脚本标记或图像标记是个好主意吗?对我来说这看起来是一个相当简单的解决方案,不需要PHP。请求页面可以是纯HTML。

看起来应该是这样的:

<img src="http://wwww.mydomain.com/myapp.php" style="width: 0px; height: 0px;" alt="Not an image"  title="Not an image"/>

你有什么建议?

4 个答案:

答案 0 :(得分:2)

这个问题已经被问到了。 How to limit display of iframe from an external site to specific domains only

基本上,您可以根据您的网络服务器限制访问权限。

使用Apache,可以在.htaccess文件中完成

使用IIS,可以在“IP地址和域限制”

中完成

如果你在某个共享托管平台上,你可能没有那么多的控制权。

答案 1 :(得分:2)

这就是我做的方式,它就像一个魅力。普通用户将无法访问我的网络应用程序。

在批准的域名上无需进行任何操作。甜!

感谢dda和jackJoe(How to limit display of iframe from an external site to specific domains only

<?php

  define('MSG_NO_ACCESS', 'No access');

  $acceptedDomains = array('mydomain.com', 'a.com', 'b.com');
  $referer=get_domain($_SERVER['HTTP_REFERER']);

  if(!$referer || !in_array($referer,$acceptedDomains))
  {
     header('HTTP/1.0 403 Forbidden');
     exit(MSG_NO_ACCESS);
  }

function get_domain($url)
{
  $pieces = parse_url($url);
  $domain = isset($pieces['host']) ? $pieces['host'] : '';
  if (preg_match('/(?P<domain>[a-z0-9][a-z0-9\-]{1,63}\.[a-z\.]{2,6})$/i', $domain, $regs)) 
  {
     return $regs['domain'];
  }
  return false;
}

&GT;

答案 2 :(得分:1)

注入一些JS的小PHP可以有很长的路要走。

<?php
if(array_key_exists('HTTP_REFERER',$_SERVER)){
  $referer=$_SERVER['HTTP_REFERER'];
} else {
  $referer='';
}
echo "<script type='text/javascript'>
var referer='".$referer."';
</script>
";
?>

这会将HTTP_REFERER注入“referer”JS变量。现在有了这个和以下的JS代码,你很高兴:

if (top === self) {
// not in a frame, no worries
} else {
// in a frame, decide whether referer is one of the guys allowed to display your web site...
// nuke the content, redirect, display a goatsee pic, etc
}

答案 3 :(得分:0)

你无能为力阻止这一点。拥有服务器代理的任何人都可以抓取您的HTML并将其重新提供为自己的HTML。

规则#1:如果您不希望别人在互联网上窃取您的内容,请不要将其置于在线状态。