|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
' j6 S/ D# c: E4 N这次讲一下如何防止自己的网页被别人iframe。" Z9 j W! E3 a' s6 @
, q! ?4 I1 S( j
1、这些方法都可行,但不是太可靠。
& q8 m' o$ P% V0 x5 A4 K- <script language="javascript">
7 ^- {4 g3 ~+ J0 f7 H - if( top.location != self.location) top.location.href=self.location.href;" ^! l- D8 q9 y% ^3 S* P4 d1 U8 U
- </script>
复制代码 或
- [1 g2 P% r5 W3 H. P0 E: c- N: N$ E- <script language="javascript">
2 l' E4 D5 a0 S- h) L - if (top.location != location) top.location.href = location.href;% t1 O- W8 A- }/ x8 j
- </script>
复制代码 或% m0 F( z ]3 i/ s* v& E0 U
- <script language="javascript">
6 C e# |) q) K, v4 J - if (top.location != self.location) {top.location=self.location;}
$ s( p" e( [) B7 }' J - </script>
复制代码 或
" q# m9 N+ p4 j- h( |7 X- <script language="javascript">2 K7 A* n" x' {6 }
- if (top.frames.length!=0) top.location=self.document.location;
+ [) k, |7 `+ V- z3 d8 i. A - </script>
复制代码 不可靠的原因:
# g+ O! G7 t" m0 [& a9 e当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
+ d8 Q+ L" k5 Y1 c- <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>
0 E2 r$ i% @/ W/ ?7 Z1 K, j - <script language="javascript">
& _) P0 {5 v1 }0 @ - var location="";
& `& G& k# Z% c, ^1 W - var navigate="";) p3 @) H# P. q6 h
- frames[0].location.href="";* N8 Z2 D. k6 b4 {' s! n% B
- </script>
复制代码 或( Q0 Z" v1 P9 S2 D
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或7 k8 _5 _7 i3 g5 l1 v, C7 d
% T* _/ q; z: K3 a+ G& d% e- <script type="text/javascript" charset="utf-8">
) e' T. p6 ~2 o& u4 T, i4 ^/ S) k% f - 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>');
0 [6 A5 W& J2 Q# t9 I$ h - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
! ~9 Q" P5 l& D5 d9 L& JMeta标签方法
% e" a S4 ?+ S8 i- X- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
+ K# J; M& Q2 z/ ^- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法: S( N" T2 T% M8 \4 O- ^
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
" G I7 a) l7 ]; u* \( E( ~- add_header X-Frame-Options "SAMEORIGIN";
复制代码
" d8 d3 h: f% J.htaccess方法
) F" |% n7 m$ L: ^+ ]: z: C% H在网站根目录下的.htaccess文件中中加一句
; T* T9 Z! c3 ?- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ; a' [; f" N3 V
IIS方法
2 {( q, M$ Z: f* m在web.config文件中加- <system.webServer>
3 A% g; p& D9 q9 Y# k) C: l0 f& O - ...
9 }9 V+ T+ L8 L2 z' H' ]3 j - <httpProtocol>
; z( q9 n# f: U. D* ]8 L: _ _6 e - <customHeaders>. _5 j& O0 `' z! `; r) k7 ]
- <add name="X-Frame-Options" value="SAMEORIGIN" /> : o7 o$ z# z' o$ ]2 ]
- </customHeaders>
# o4 ~+ |1 X2 I - </httpProtocol>
7 W+ V( q d. s- I% [ - ...% x3 f$ ?" {* a1 J& W
- </system.webServer>
复制代码 # p8 ]- I* l) O. ?5 i
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
6 |% A2 C3 J1 {/ r! a6 O/ W! j$ ?" ?% C; Y
3、推荐解决方法。 z4 A+ q& a+ k- a/ X, h
- <script language="javascript"> 1 s0 |* x! N, l( X
- if(top != self){
$ x. p1 F. ^& c7 M8 J+ f3 b/ D9 F0 n - location.href = "http://xp6.org/iframe.html";
. G$ [( u4 i3 S) j0 r" | - top.location.href=self.location.href;0 a9 f Q4 f! v7 \9 |2 t$ I% s, u3 ~
- }
7 l- U* p! A* Q4 t p6 ]" D - </script>
复制代码 6 p; P: S4 @7 e* i! m
将上面的代码复制到需要屏蔽页面<head>里面加载。
! c- l% y+ T8 V+ A. B制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。' \ T1 H- q/ H/ F# b( v
原理:# j. C; K. a( ^% s0 G
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。$ P; Y# \3 O! ]* M5 X
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。% S3 n4 @% X2 \* `! B
目前测试这种方法没什么问题。
/ W, t. |$ L/ x: F( n6 \* \5 @: Z2 _6 D$ h7 j
|
|