|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。* J( R9 D$ O; h1 @5 |
这次讲一下如何防止自己的网页被别人iframe。3 ]. K% X2 B1 I& ?7 [& B- W1 V# L
2 U; p2 P+ {/ l* D0 m
1、这些方法都可行,但不是太可靠。* i# v) b4 K" e) L; j0 l' f, B
- <script language="javascript">9 u& S, a4 B m h( ]
- if( top.location != self.location) top.location.href=self.location.href;3 V$ ~9 k( s3 N$ T
- </script>
复制代码 或
! k4 @' W, n3 n7 ^9 H- <script language="javascript">7 }5 l, p* I- V. ~( D4 ?
- if (top.location != location) top.location.href = location.href;
, c2 R& ^, n6 _. h9 E8 c5 k$ H - </script>
复制代码 或* V: V" z" P* e1 Q
- <script language="javascript"> k4 _& F" e& `9 Q: @# P
- if (top.location != self.location) {top.location=self.location;}
4 X% }$ N# y7 F9 F* ~+ ^# J - </script>
复制代码 或
9 R. g; o( u& C( |* z- <script language="javascript">' H$ h3 k( m7 k6 p
- if (top.frames.length!=0) top.location=self.document.location;- u5 `3 b: |8 I, @0 t8 [- I3 A
- </script>
复制代码 不可靠的原因:. V" x0 m7 z8 s' L+ S% [! i7 C
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
; F1 f: g& ?* }0 ]( I" c, L- <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>
6 W& H! t* h% q# j - <script language="javascript"> ! R( o4 Y3 f8 z3 g/ Q7 X
- var location="";
, U( d8 V- ?7 _% f5 Q0 q! \ - var navigate="";+ k5 V" V2 M; X4 }5 r0 m
- frames[0].location.href="";8 G1 y0 s w/ s) e* s
- </script>
复制代码 或) `$ N: V& f4 k
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
7 ]8 a7 R* w7 [) s) P" y: w- w4 i2 \5 N7 G, x7 |6 t
- <script type="text/javascript" charset="utf-8">, A& U% }4 X" m: k/ K7 A) j
- 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>');$ R; g; A9 m; Q* a' L5 _! K
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
4 e& s1 h- _9 G6 _Meta标签方法
( C- Q/ d7 P7 ]* }2 u& q- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法/ c( b2 g9 J5 `6 O6 L) p' h
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
! f$ V4 F- x6 @- ?0 y; K0 g- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法: I' ~1 V$ M% z2 P
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
) ^! n) ]; e, y$ ~; R.htaccess方法' E( `7 K5 e/ N8 w/ ~% m
在网站根目录下的.htaccess文件中中加一句
) U# m' V9 ]3 v& z( k- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 , z+ S0 x# K I
IIS方法- n+ a7 q! ]# ~' l
在web.config文件中加- <system.webServer>
4 s/ N& c# a, G1 n$ T - ... d: _8 B9 a) Q: E$ n
- <httpProtocol>+ S, E5 q3 n9 R- ~9 m, L
- <customHeaders>2 Z7 _% f6 M" I6 t w+ ]
- <add name="X-Frame-Options" value="SAMEORIGIN" />
2 E+ x* R" ~! A) _7 I# ^ - </customHeaders>
% ^. z# f* x8 h8 {0 r7 n6 g# n - </httpProtocol>
! D2 Z* i# w0 r: }7 h - ...
9 Y7 l5 v4 V1 y/ } - </system.webServer>
复制代码 # |4 G, h. c( h0 L
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
7 \) [$ u! z j/ Y9 C8 a% W7 |7 T9 J0 v
3、推荐解决方法。4 S" c- D4 x* ]$ M1 f' S8 f
- <script language="javascript">
5 s9 ]* ^8 [/ S! P, W; z/ x - if(top != self){
4 o. ~8 T" a6 j# a4 A1 P - location.href = "http://xp6.org/iframe.html";
$ Q+ _& T j2 l9 v, l - top.location.href=self.location.href;( w+ K, T2 h* F; ]7 l6 w
- }
9 Q- Z% k( O0 n" X: n - </script>
复制代码 0 `! U- o( f$ I+ i) h1 u. r
将上面的代码复制到需要屏蔽页面<head>里面加载。" T" z/ c6 e+ P) q% Q' c2 P: t
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。; V( H1 J9 u- n$ S/ g+ ]
原理:
& h3 u T( d6 i+ r& ]第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。6 j$ `$ |" |% Q( ^0 _2 }5 O S
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
1 t2 _$ L# E" [ b* X目前测试这种方法没什么问题。" ]" y& O# O6 k1 M% k
" e( r( e6 m( G
|
|