【问题标题】:Handle iframe security issues (ex: 'X-Frame-Options' to 'SAMEORIGIN')处理 iframe 安全问题(例如:“X-Frame-Options”到“SAMEORIGIN”)
【发布时间】:2013-04-30 11:06:59
【问题描述】:

在我的应用程序中,我有一个可以打开任何网页的 iframe(99% 的时间都是同源的)。但是用户可以点击 iframe 内的链接并访问外部网站。我设法检测到该网站是否属于同一来源,但是对诸如“https://www.google.ca/”之类的网站的请求会引发以下错误:

拒绝在框架中显示“https://www.google.ca/”,因为它将“X-Frame-Options”设置为“SAMEORIGIN”。

我的 iframe 绑定了 beforeunload、onerror 和 onload 事件,但我无法使用事件对象处理此安全问题。

【问题讨论】:

    标签: iframe same-origin-policy x-frame-options


    【解决方案1】:

    遇到了同样的问题,将第 3 方页面加载到我的 iframe 中,其中一些被未包含在 HTML 中的 X-Frame-Options 阻止。

    注意:在 CHROME、iPhone、Mozilla Android 4.4.2 上工作,但在 FireFox 上不工作。

    如果您希望这些页面在新窗口中打开,这就是我的管理方式。 对于其他人在此特定情况下搜索解决方案可能有用。

    PHP (get_headers) 对它们中的大多数都适用,但我遇到少数没有将 X-Frame-Options 直接放入 HTML 标头(自动包含),因此 get_headers 失败并且浏览器收到此 [Load denied by X-Frame -选项:your_guest_url 不允许跨域框架。]

    我必须在我的第一页上添加链接,让用户通过单击它在新窗口中打开有问题的页面,并使用 javascript、加载图标和 setTimeout() 创建中间页面。

    firstpage.php [在 'iframe' 下有 'iframe' 和 'a']

    <?php
    foreach(get_headers("http://".$_REQUEST["address"]) as $v) {
        if($v == "X-Frame-Options: SAMEORIGIN" || $v == "X-Frame-Options: DENY") {
        header("location: http://".$_REQUEST["address"]);
        die();
        }
    }
    ?>
    
    <iframe id="iframe-id" src="secondpage.php"></iframe>
    <a href=your_guest_url>go to your_guest_url</a>
    
    <script language='javascript'>
    setTimeout(function() {
    document.getElementById('iframe-id').src = 'your_guest_url';
    },500);
    </script>
    

    secondpage.php [加载到 iframe]

    <div class="loading-info">
        <div id="loading-info" class="loading-info-content">
                <i class="fa fa-3x fa-spinner fa-pulse"></i>
        </div>
    </div>
    
    <script>
    setTimeout(function() {
    document.getElementById("loading-info").innerHTML = "<p'>USE LINK BELOW IFRAME</p>";
    },5000);
    </script>
    

    没有“隐藏”X-Frame-Options 的页面在 500 毫秒后通过 javascript 加载到 iframe 中,有问题的页面不会加载,因此第二页停留在 iframe 中并执行 javascript setTimeout();。

    【讨论】:

      猜你喜欢
      • 2021-05-09
      • 1970-01-01
      • 1970-01-01
      • 2014-04-30
      • 2012-08-24
      • 2014-07-27
      • 2013-08-10
      • 2022-01-22
      • 2016-02-10
      相关资源
      最近更新 更多