iframe的远程主机

时间:2012-06-22 04:00:14

标签: php javascript dns

我在各种网站上都有iframe。在我的js中,我正在攻击不同域中的php文件。有没有办法获取托管我的iframe的服务器的域名。 (这是为了防止其他人攻击我的php文件)。

实施例。 我有一个名为www.domain.com的域名和另一个名为www.phpscript.com的域名 如果我的网站嵌入yahoo。有什么方法可以让我发现我的js来自www.domain.com而不是一些狡猾的网站?

$_SERVER['REMOTE_HOST']$_SERVER['REMOTE_ADDR']在这种情况下不起作用,因为REMOTE_ADDR会为用户提供IP,REMOTE_HOST会返回yahoo

2 个答案:

答案 0 :(得分:2)

如果您希望允许跨框架进行互动,但只允许在域的子集内进行互动,那么您需要Content Security Protection个扩展。目前这只在Firefox和Chrome中实现(不是MISE,不了解Safari和Opera等),但它是一个w3c标准,所以希望大家最终加入。

因此,在Example.com上运行的php脚本允许从other.com访问(反之亦然)....

$ok="'self',*.other.com,*.example.com";
$policy="default-src $ok; frame-ancestors: $ok";
header("X-Content-Security-Policy: $policy");
header("X-Webkit-CSP: $policy");
header("Content-Security-Policy: $policy");

注意,启用CSP时还有其他含义。

答案 1 :(得分:0)

修改

OP希望与我最初解释问题的方式相反。

要阻止在iframe 时访问该网站,您可以使用:

<script type="text/javascript">
if (window.top === window.self) {

    window.self.location = 'about:blank'; 
    window.self.onload=function(evt){ 
        window.self.location = 'about:blank'; 
        document.body.innerHTML=''; 
    };
    document.body.innerHTML='';
}
</script>

这需要启用JavaScript,如果在iframe之外访问该页面,则会将页面空白并重定向到about:blank(无)。


阻止在iframe IS 时访问该网页(原始答案,仍然有用)。

您可以发送标题X-Frame-Options: SAMEORIGIN (what Google does),要求浏览器不要在您网域中不显示的内容中显示内容。

<强> PHP

header('X-XSS-Protection: 1; mode=block');
header('X-Frame-Options: SAMEORIGIN');

您还可以使用JavaScript解决此问题,以停止通过iframe访问该网站:

if (window.top !== window.self) { 
    window.self.location = 'about:blank'; 
    window.self.onload=function(evt){ 
        window.self.location = 'about:blank'; 
        document.body.innerHTML=''; 
    }; 
    document.body.innerHTML='';
}

这两种方法都依赖于浏览器支持,但它总比没有好。