很多人做的網站、博客會被別人用嵌套成為別人的網站,而瀏覽器可能還會收錄這些盜用者的頁面,結果自己做的網站反而讓別人增加了排名,這是無法接受的。
那么如何防止網頁被別人的iframe嵌套,防止別人低成本地鏡像自己的網站呢?最簡單的方法,是使用js在做個前端處理:
<script type="text/JAVAscript"> window.onload=function(){ if(window.top != window.self)window.top.location = window.self.location; } </script>
原理就是判斷 window.top 是不是 window.self,如果不是則說明被嵌套了,強制把自己的location替換到top去,實現(xiàn)反嵌套。核心語句是這個
if(window.top != window.self)window.top.location = window.self.location;
但由于方法簡單,所以也很容易被人破解。如果別人在引用iframe的時候,是通過document.write('<iframe></iframe>'),那么上面的js代碼就無法生效,比如:
document.write('<iframe frameborder="0" scrolling="yes" name="main" src="http://你的網址" style="height:100%; visibility: inherit; width: 100%; z-index: 1;overflow: visible;"></iframe>');
所以網上很多文章會建議使用Meta標簽加 X-FRAME-OPTIONS 屬性,通過瀏覽器來判斷和拒絕被嵌套頁面的顯示:
<meta http-equiv =“X-Frame-Options”contents =“DENY”>
這個仍然是在前端頁面里做的,由于其不可靠, X-FRAME-OPTIONS 特性已經逐漸被瀏覽器棄用了,因此現(xiàn)在也不好使了,但它被保留在了服務器端,通過添加響應頭的方法實現(xiàn)避免網頁被嵌套,大多數瀏覽器能支持。
X-Frame-Options 有三個值:
DENY
表示該頁面不允許在 frame 中展示,即便是在相同域名的頁面中嵌套也不允許。
SAMEORIGIN
表示該頁面可以在相同域名頁面的 frame 中展示。
ALLOW-FROM uri
表示該頁面可以在指定來源的 frame 中展示。
方法1:在服務器端,可通過修改web服務的配置來實現(xiàn),適合所有的靜態(tài)頁面或者動態(tài)頁面:
配置 Apache的方法:
例1:在所有頁面上發(fā)送 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響應頭來實現(xiàn):
php
header('X-Frame-Options:Deny');
asp
Response.AddHeader("X-Frame-Options", "Deny");
方法1或2任選其一即可,至此,終于完美解決!