2013-05-06 21 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();.