2013-05-06 284 views
2

在我的应用程序中,我有一个可以打开任何网页的iframe(同一来源的99%的时间)。但用户可以点击iframe中的链接并进入外部网站。我设法检测,如果该网站是同根同源的或没有,但一个网站,如“https://www.google.ca/”引发以下错误的请求:处理iframe安全问题(例如:'X-Frame-Options'到'SAMEORIGIN')

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

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

回答

0

已经有同样的问题,第三方页面加载到我的iframe,其中一些被X框架选项阻止,未包含在HTML中。

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

如果你想要在新窗口打开这些页面,这是我如何管理它。 也许有用的东西为其他人寻找这种特殊场景的解决方案。 (get_headers)对大多数人来说工作正常,但是我发现很少有人没有将X-Frame-Options直接放入HTML头(自动包含),所以get_headers失败了,浏览器接收到了这个消息[帧选项:your_guest_url不允许跨越帧。]

我不得不在我的第一页上添加链接,让用户打开新窗口中的有问题的页面,通过点击它并创建inbetween页面与JavaScript,加载图标和的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> 

页而不 '隐藏的' X- Frame-Options在500ms后通过javascript加载到iframe中,有问题的页面不会加载,所以secondpage停留在iframe中并执行javascript setTimeout();.