防止網頁被別人的iframe嵌套

防止網頁被別人的iframe嵌套

很多人做的網站、博客會被別人用嵌套成為別人的網站,而瀏覽器可能還會收錄這些盜用者的頁面,結果自己做的網站反而讓別人增加了排名,這是無法接受的。

那麼如何防止網頁被別人的iframe嵌套,防止別人低成本地鏡像自己的網站呢?最簡單的方法,是使用js在做個前端處理:

原理就是判斷 window.top 是不是 window.self,如果不是則說明被嵌套了,強制把自己的location替換到top去,實現反嵌套。核心語句是這個

if(window.top != window.self)window.top.location = window.self.location;

但由於方法簡單,所以也很容易被人破解。如果別人在引用iframe的時候,是通過document.write('<iframe>'),那麼上面的js代碼就無法生效,比如:

document.write('<iframe>');

所以網上很多文章會建議使用Meta標籤加 X-FRAME-OPTIONS 屬性,通過瀏覽器來判斷和拒絕被嵌套頁面的顯示:


這個仍然是在前端頁面裡做的,由於其不可靠, X-FRAME-OPTIONS 特性已經逐漸被瀏覽器棄用了,因此現在也不好使了,但它被保留在了服務器端,通過添加響應頭的方法實現避免網頁被嵌套,大多數瀏覽器能支持。

X-Frame-Options 有三個值:

DENY

表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許。

SAMEORIGIN

表示該頁面可以在相同域名頁面的 frame 中展示。

ALLOW-FROM uri

表示該頁面可以在指定來源的 frame 中展示。

方法1:在服務器端,可通過修改web服務的配置來實現,適合所有的靜態頁面或者動態頁面:

配置 Apache的方法:

例1:在所有頁面上發送 X-Frame-Options 響應頭

Header always append X-Frame-Options SAMEORIGIN

例2:配置 X-Frame-Options 設置成拒絕

Header set X-Frame-Options "deny" 

例3:配置 X-Frame-Options 設置成 allow-from

Header set X-Frame-Options "allow-from https://example.com/"

配置 nginx的方法:

add_header X-Frame-Options SAMEORIGIN always;

方法2:在服務器端,也可以通過設置後端語言的http響應頭來實現:

php

header('X-Frame-Options:Deny');

asp

Response.AddHeader("X-Frame-Options", "Deny");

方法1或2任選其一即可,至此,終於完美解決!


分享到:


相關文章: