|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
2 t, q- K' ]; T) U这次讲一下如何防止自己的网页被别人iframe。
& T* l: Y/ M; D, Z7 Z$ }
4 i! `, R$ _) ^, b3 c$ ~/ L1、这些方法都可行,但不是太可靠。$ `+ j* g7 ]% J$ S( S
- <script language="javascript">1 R) H) G2 s; ]2 X7 }
- if( top.location != self.location) top.location.href=self.location.href;( Y0 h" x( F( {3 B) z
- </script>
复制代码 或; N* c' |$ d+ w& c. ^) Q, N2 r
- <script language="javascript">4 B* C+ o2 H' [0 s
- if (top.location != location) top.location.href = location.href;
5 o7 X' U$ @9 x2 e4 Z - </script>
复制代码 或
: ?3 d8 `, n, w! p' T. m, J _- <script language="javascript">1 y9 s$ s5 U# e4 U
- if (top.location != self.location) {top.location=self.location;}
$ T6 j$ N& j/ M' ^/ u - </script>
复制代码 或: g) x1 i6 `9 [' n/ ~" c
- <script language="javascript">& s' j+ z& Y: j4 |) {3 _, u- f
- if (top.frames.length!=0) top.location=self.document.location;
4 g. _2 V1 g" h( D! U - </script>
复制代码 不可靠的原因:
' A+ R0 l, I( ?8 z8 B7 N l当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
+ ?5 a8 Y$ O' |* l- y5 B; a3 t- <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>1 L" R: [' d( z z) C& q% ~
- <script language="javascript">
8 B+ Q( Z( @3 k! H" C - var location="";9 @; r8 q" O- }) O; W7 H
- var navigate="";
6 Z( ]- w4 U& X) M3 ? - frames[0].location.href="";' F9 _9 K5 B# C# G& }
- </script>
复制代码 或
. }9 p$ b5 P1 @: v1 b- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
- v( |! j6 }8 S: Y; a' y4 Q4 J* |0 z/ G& M& M* F
- <script type="text/javascript" charset="utf-8">
: l- m( S6 Z s' Z# u$ a9 z" { - 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>');" L% P( W# j2 [0 V3 M; X
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
8 J- @; H( w1 I$ u% J' TMeta标签方法
0 g f! D, V( G3 f+ n O5 @- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法' o) o9 i- R6 e3 ^$ N2 V; G! c, |* ]( p
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
5 F: A7 N0 V7 f ?! Z- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法; E- w6 D" d, A2 S/ O- T8 b
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
; r8 \& Z/ A1 \5 X.htaccess方法- f) w3 k$ o5 |3 c$ h; G) ?7 ~! S
在网站根目录下的.htaccess文件中中加一句6 D% `9 P1 U/ W: Z [# w
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
* v/ P! |6 M" c0 D/ f) o& g: TIIS方法
' ^ ~1 b" u- Z- a& ?% p/ H在web.config文件中加- <system.webServer>
9 c& d/ i3 B. D/ Y - ...
$ u* b! A, e9 L& e - <httpProtocol>5 U: d" y; y7 L, s3 b/ v8 R
- <customHeaders>
' {- U* E4 d( A9 I8 u7 m; j - <add name="X-Frame-Options" value="SAMEORIGIN" />
& T& R! a2 m+ s& W% Z' B - </customHeaders> ! v) M! ]# b! {! d, M; q+ E
- </httpProtocol> R/ }0 d3 j% Q: g
- ...; Z" x2 A2 E" c& ^: R$ U8 ?/ h
- </system.webServer>
复制代码 5 |5 _- Z6 N8 T
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。# I* C( l0 {- r- G8 \
$ D5 ?2 \3 F- }+ S3、推荐解决方法。/ {( ` l5 E0 N+ `
- <script language="javascript">
2 h( F; Z r) v' Y3 s - if(top != self){
8 T- v3 N4 a% Y( p+ P* } - location.href = "http://xp6.org/iframe.html"; & }+ C, W6 A* ~, ^! u8 k; F; e; j
- top.location.href=self.location.href;
6 K" b. S8 c1 k$ q - }
+ [$ ]+ D9 P1 R- S( F) D n9 u( A - </script>
复制代码 8 h% Z8 D. C& e0 s
将上面的代码复制到需要屏蔽页面<head>里面加载。
! W9 r- {( L e4 ^制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
' P$ d$ j; G6 `& N6 `" _: M8 }原理:# w: b2 t6 c z
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。4 F( f7 l# @0 ~# t7 o) K; t
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。0 `5 m4 U& k# \& S0 c
目前测试这种方法没什么问题。
. d' Q$ G& s( u7 X& `# q0 X6 |5 l& C) c6 C! Q7 y
|
|