【问题标题】:Remote Host of iframeiframe 的远程主机
【发布时间】:2012-06-22 04:00:14
【问题描述】:

我在各种网站上都有 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

【问题讨论】:

  • 只有 http referer,它并不总是可用,而且绝对不可靠。
  • 这是个问题,它不够可靠 :( 而且它不会也返回yahoo 吗?

标签: php javascript dns


【解决方案1】:

如果您想允许跨框架但仅限于域子集内的交互,则需要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 时还有其他含义。

【讨论】:

    【解决方案2】:

    编辑:

    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(无)。


    防止页面在 IS 在 iframe 中时被访问(原始答案,仍然有用)。

    您可以发送标头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='';
    }
    

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

    【讨论】:

    • 该网站是围绕在 iframe 中使用而构建的。因为它是一个视频播放器。所以阻止 iframe 不是解决方案。
    • 如果您只在顶部框架上使用该 JavaScript,那将可以工作 - 其他框架不必包含该脚本(如果精明的用户可以嵌入不受保护的框架)。您的框架是加载整个页面还是仅加载内容。
    • 拥有所有必需的 html 标签和视频播放器 + 它的组件。
    • 您应该能够将 JavaScript 仅放在父页面上。无论如何,您可以在 PHP 中设置的标头应该足够有效,并且不会阻止您访问自己的框架。
    • 视频播放器位于 100 多个网站上。它们也位于我也无权访问的不同域中
    猜你喜欢
    • 2019-01-25
    • 2012-11-15
    • 2017-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-14
    • 1970-01-01
    • 2012-06-05
    • 2021-11-04
    相关资源
    最近更新 更多