2012-06-22 83 views
0

我有各种网站上的iframe。在我的JS中,我击中了一个不同域中的PHP文件。有没有办法让托管我的iframe的服务器的域名。 (这是为了防止别人打我的PHP文件)。iframe的远程主机

例子。 我有一个名为www.domain.com域和另一个电话www.phpscript.com 如果我的网站在yahoo包埋。有没有什么办法,我可以找出我的js调用从www.domain.com,而不是来自一些狡猾的网站?

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

+0

这里只有HTTP引用,这并不总是可用的,并且最肯定永远可靠。 –

+0

这是一个问题,它不够可靠:(并且不会返回'yahoo'以及 – Bankzilla

回答

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之外访问,则空白(无)。


为了防止从页面时,它位于iframe(原来的答案,还是有用的)访问。

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

PHP

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

你可能还解决此用JavaScript停止通过I帧访问网站:

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=''; 
} 

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

+0

该网站是围绕在iframe中使用。因为它是一个视频播放器。因此阻止iframe不是一个解决方案 – Bankzilla

+0

如果你只在顶部框架上有JavaScript,那么这个框架就可以工作 - 其他框架不需要包含该脚本(当然,精明的用户可以嵌入非受保护的框架)。或只是内容 – Stecman

+0

拥有所有必需的html标签和视频播放器+它的组件 – Bankzilla

2

如果你想允许互动跨框架,但只在域的一个子集,那么你需要的Content Security Protection扩展。目前,这是在Firefox和Chrome只执行(不MISE,不知道Safari和Opera等),但它是一个W3C标准,所以希望每一个人能够最终加入。

因此,对于一个PHP脚本乳宁在Example.com允许从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"); 

NB那里,当您启用CSP其他的含义。