|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。% x+ D3 u! [: @9 U+ ?2 s- W! \
这次讲一下如何防止自己的网页被别人iframe。
( X5 N! q- s s6 m0 t4 J" F4 S M# U, u1 Z( x0 x- q! Z
1、这些方法都可行,但不是太可靠。9 x3 L3 U8 t' d) T
- <script language="javascript">
( J! w' z7 k P: s$ g - if( top.location != self.location) top.location.href=self.location.href;; i) P6 z- a7 U2 b( z" g
- </script>
复制代码 或
" F! Q8 Z* b- u- {$ e& h- }* [- <script language="javascript">. u; M v+ v1 n. E, m# d/ r: G
- if (top.location != location) top.location.href = location.href;
: b6 r+ k4 _+ u - </script>
复制代码 或, z# J4 Y* u p* |8 E$ V G6 r
- <script language="javascript">
0 Q$ W# e5 j; O4 V+ Y$ k( }2 } - if (top.location != self.location) {top.location=self.location;}
& q: p8 \7 q7 a9 i - </script>
复制代码 或
3 _4 x5 H" U+ {- <script language="javascript">
; {4 ?# S9 Z# a8 ^; r+ H7 O - if (top.frames.length!=0) top.location=self.document.location;; T' `2 ]+ j6 K a8 E
- </script>
复制代码 不可靠的原因:/ o3 s; l+ n5 q: ?# N
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
6 P" K: [7 E. i, C, }6 u% o- <iframe src="http://xp6.org/" name="tv" marginwidth="0" marginheight="0" scrolling="No" noResize frameborder="0" id="tv" framespacing="0" width="580" height="550" VSPACE=-145 HSPACE=-385></iframe>% N) L7 V4 D0 G0 I3 n# T2 m; R
- <script language="javascript">
) {. }8 ?+ F% ?: { - var location="";5 H+ [+ v0 H* h( P
- var navigate="";. b( j. y! [- s- k- ^/ v
- frames[0].location.href="";
. K. p& P/ U9 H8 U a3 h6 Q - </script>
复制代码 或9 M2 D6 C4 R) Y- `0 V6 I0 V: z
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
8 W \, l6 W# }7 `, U: p9 G3 w ~8 a- V' f/ y4 o
- <script type="text/javascript" charset="utf-8">
/ e8 _, f. X6 c0 y8 V @, c0 B: A - document.write('<iframe seamless sandbox security="restricted" id="url_mainframe" frameborder="0" scrolling="yes" name="main" src="http://xp6.org/" style="height:100%; visibility: inherit; width: 100%; z-index: 1;overflow: visible;"></iframe>');# ^2 c3 m# w* v4 }9 v
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。2 U. G: ]9 G* E M% k0 l* m
Meta标签方法
( \6 H3 [& P( k0 N- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法8 a- B. J! L0 c3 U# L
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
/ w" E |6 @& g- [- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
! ?/ i5 O- h5 C4 X0 ] p5 w- add_header X-Frame-Options "SAMEORIGIN";
复制代码 : y) n3 W0 h% e9 b2 c! l- p
.htaccess方法0 Z% ~2 E- F3 u+ @8 @
在网站根目录下的.htaccess文件中中加一句) E9 Y+ Y0 Z, G0 z: a
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
0 w0 {8 I% Q' t+ qIIS方法1 n* a" y; H! t+ d8 n
在web.config文件中加- <system.webServer>
, S8 B2 ^( m k5 l& Z) ^ - ...7 z3 H( t! P: B. Y
- <httpProtocol>
5 r" O6 ~" n- v, T; T - <customHeaders>3 _' k1 x& Z- u+ w/ i/ k
- <add name="X-Frame-Options" value="SAMEORIGIN" /> . K7 G g4 h$ L: s7 Q
- </customHeaders> ' ]5 u; z8 c1 D" T# j9 Z1 V8 ^
- </httpProtocol>
4 t8 w# Z! z" _ - ...
, {6 g5 Q O/ ^3 A - </system.webServer>
复制代码 1 G: ]2 N I4 x
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
+ u g1 i0 \- D$ E8 z( u0 z
h6 u. g+ C" Y0 `; a: C8 X9 n3、推荐解决方法。 o1 p9 N* I* r9 X H
- <script language="javascript"> 8 e) h! ]2 M% H
- if(top != self){
0 j6 L8 T T1 p ]/ A - location.href = "http://xp6.org/iframe.html";
. |, X! G* V" f5 D; \+ h - top.location.href=self.location.href;6 V% g5 a, }8 t V# v' @' \
- }
V$ I3 R$ G) o: s4 p+ X - </script>
复制代码 * q3 B3 S; S7 ^0 W# F. R0 T
将上面的代码复制到需要屏蔽页面<head>里面加载。! D2 B5 P6 x3 ^* h3 ]0 _* a
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。: }+ b) t) T) @: g0 T+ s7 W
原理:
' Q; G; ~3 s# B9 z第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。" _" E5 m( \4 N; o
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。; S+ V/ z: U9 V" T. S: u8 d
目前测试这种方法没什么问题。
- d! G; j* `$ k9 {+ b' E/ X7 P' ?( l1 Z7 d
|
|