0

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

例子。如果我的 网站嵌入www.domain.com在. 有什么方法可以发现我的 js 调用来自而不是某个狡猾的网站?www.phpscript.comyahoowww.domain.com

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

4

2 回答 2

2

如果您想允许跨框架但仅在域的子集内进行交互,那么您需要内容安全保护扩展。目前这仅在 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 时还有其他含义。

于 2012-06-22T08:37:22.717 回答
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 中被访问(原始答案,仍然有用)。

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

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

这两种方法都依赖于浏览器的支持,但聊胜于无。

于 2012-06-22T04:17:13.750 回答