2010-05-24 38 views
60

如何在頁面加載期間將我的網頁作爲框架嵌入到其他網站?我猜引用者請求標題不能幫助我在這裏?謝謝。如何防止我的網站頁面通過iFrame的第三方網站框架進行加載

+0

嗨,約翰,我不能說我需要完整的解決方案在這裏,只是移動的方向就夠了,在我找到我的問題的答案後,我總是發佈它作爲答案,這是我能參與的唯一方式在社區。 – abovesun 2010-05-25 08:44:47

+0

注意:設置元標記是沒用的!例如,不起作用。不要使用它!只有像下面的例子那樣設置HTTP頭,X-Frame-Options才能工作。 https://developer.mozilla.org/fr/docs/Web/HTTP/Headers/X-Frame-Options – 2017-08-16 00:14:00

回答

84

你不能從服務器端檢查它,但你可以在頁面加載後使用javascript來檢測它。比較topself,如果它們不相同,則表示您在框架中。

此外,一些現代瀏覽器尊重X-FRAME-OPTIONS頭,可以有兩個值:

  • DENY - 阻止頁面從如果它被包含在一個幀
  • SAMEORIGIN正在呈現 - 與上述相同,除非頁面與頂級框架集持有者屬於同一個域。

用戶包括Google的Picasa,無法嵌入到框架中。

瀏覽器支持的標題,與所述最低版本:

  • IE8和IE9
  • 歌劇10.50
  • 的Safari 4
  • 鉻4.1.249.1042
  • 火狐3.6.9(較老的版本與NoScript
+0

謝謝,你的方法很有道理! – abovesun 2010-05-25 08:50:12

+2

由於我偶然在這裏通過谷歌搜索,我會補充說Firefox在2010年8月添加了X-FRAME-OPTIONS FF3.6.9: http://michael-coates.blogspot.com/2010/08/x -frame-option-support-in-firefox.html – ThePants 2012-03-08 20:28:11

+0

@ThePants謝謝,我已經更新了我的答案。 – Maerlyn 2012-03-08 21:12:33

36

Stac koverflow包含一些JS來測試它(master.js)。這是它的相關部分:

if(top!=self){ 
    top.location.replace(document.location); 
    alert("For security reasons, framing is not allowed; click OK to remove the frames.") 
} 

但請記住,JS可以被禁用。

+0

如果您想要將消息發送給將您的內容放入iframe中的人,或者他們的網站的最終用戶正在iframe中查看您的內容,則此方法特別有用。 – kevinmicke 2017-08-02 18:40:33

2

使用javascript通過在php文件的末尾放置以下腳本來檢查它是否加載到iframe上,並重定向到顯示警告的頁面,或者注意您的頁面不應該使用iframe加載。

<script type="text/javascript"> 
if(top.location != window.location) { 
    window.location = '/error_iframe.php'; 
} 
</script> 
6

或者你可以阻止某個特定的域名,如果你不介意你的內容在某些位置,但不希望它在某個網站上。例如,如果offendingdomain.com被嵌入你的內容,你可以這樣做:

<script type="text/javascript"> 
    if(document.referrer.indexOf("offendingdomain.com") != -1) { 
     window.location = "http://www.youtube.com/watch_popup?v=oHg5SJYRHA0"; 
    } 
</script> 

這將檢查父文件的位置,看它是否被嵌入你的內容的offendingdomain.com。然後,該腳本會將該iframe發送給某個着名的YouTube視頻作爲懲罰。實際上,他們只是Rick-Rolled自己。

12

可以防止你的頁面加載在一個iframe使用JavaScript

<script type="text/javascript"> 
if (window.self !== window.top) { 
    window.top.location.href=window.location.href; 
} 
</script> 

頁面的iframe的容器的這個代碼變更地址到你的頁面地址和力容器,顯示你的頁面。

+0

iframe上的'sandbox'屬性允許禁止這樣的框架轉義黑客。因此,這種方式並不是防止取景的安全方式,以防您的擔憂是安全問題。 – 2015-09-03 13:21:56

18

對於modern browsers,您可以使用CSP(內容安全策略),這是一個標準。下面標頭將阻止加載文檔中任何地方的幀:

Content-Security-Policy: frame-ancestors 'none' 

(IE 11需要X-前綴,雖然)。您還可以將'none'更改爲允許進行取景的來源,例如您自己的網站。

要覆蓋較舊的瀏覽器,最好與@Maerlyn's answer一起使用。

+1

你的回答不夠清楚,所有應有的尊重。這是頭文件代碼還是PHP?例如。 – 2016-08-11 13:39:32

+1

@GaryCarlyleCook這是一個HTTP頭,應該是服務頁面時瀏覽器響應的一部分。這不是PHP代碼,儘管你可以使用PHP發送它;看[header()](http://php.net/manual/en/function.header.php) – rvighne 2016-08-11 15:33:43

相關問題