处理iframe安全问题(例如:'X-Frame-Options'到'SAMEORIGIN')

时间:2013-05-06 16:30:48

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

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

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

我有一个绑定到我的iframe的beforeunload,onerror和onload事件,但我无法通过事件对象来处理这个安全问题。

1 个答案:

答案 0 :(得分:0)

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

注意:在CHROME,iPhone,Mozilla Android 4.4.2中工作但是没有使用FireFox。

如果您希望在新窗口中打开这些页面,这就是我管理它的方式。 对于其他搜索此特定场景的解决方案的人来说,也许是有用的东西。

PHP(get_headers)对大多数人来说都很好但是我很少有人没有直接将X-Frame-Options提供给HTML标题(自动包含),所以get_headers失败并且浏览器收到这个[由X-Frame拒绝加载 - 选项:your_guest_url不允许跨源框架。]

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

firstpage.php [与' iframe'和' a'以下' iframe']

<?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>

页面没有&#39;隐藏&#39; X-Frame-Options在500ms后通过javascript加载到iframe中,有问题的页面无法加载,因此第二页保留在iframe中并执行javascript setTimeout();.