|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。7 a+ y; j& p8 T: F- }
这次讲一下如何防止自己的网页被别人iframe。
9 f+ X; \* r: D9 A
( e: S, |* W0 }1、这些方法都可行,但不是太可靠。
) J0 ^/ h- I0 _9 y( K/ c$ \- <script language="javascript">
& |7 m5 l+ q7 d7 t7 ~2 z7 r - if( top.location != self.location) top.location.href=self.location.href;
1 d" K- g5 L X- f% L - </script>
复制代码 或
2 T3 z9 z& E3 o! z( p- <script language="javascript">3 b7 E$ ]2 I6 q! }, D* n8 a4 \
- if (top.location != location) top.location.href = location.href;- n+ ]7 m" {. M1 c( j# N# s
- </script>
复制代码 或8 H# a1 u% j4 Y; P+ H. u
- <script language="javascript">
/ C2 B5 G5 o7 W( }6 p) d3 g - if (top.location != self.location) {top.location=self.location;}/ D3 Y k! q1 R1 J: L
- </script>
复制代码 或
) U9 D. M7 v9 n# }2 k- <script language="javascript">, D; g2 u/ ~! ?1 u; {( h$ h
- if (top.frames.length!=0) top.location=self.document.location;6 w6 r; J4 l5 v: L3 {/ _( ?
- </script>
复制代码 不可靠的原因:
6 {. ~6 r8 w4 r当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
' T$ H/ z' _7 Z- <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>
' _3 t6 X. N# R4 h" A" g1 e - <script language="javascript">
* V: |- n8 X2 ^' B2 w - var location="";
1 l( p9 a7 A' [# ~% d- ] - var navigate="";% p. b9 V3 F* ]1 `/ J R
- frames[0].location.href="";
+ U, Z u" v6 D - </script>
复制代码 或
' N9 c2 \7 d. t, k- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或" \! V& g4 J$ n
8 X& u* p. ?; e8 Q' q
- <script type="text/javascript" charset="utf-8"># m1 C/ B3 b8 _/ k- g
- 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>');. K& N" r F0 d- m6 g0 I
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
/ J/ v0 T% ]5 ?5 m' z) O8 iMeta标签方法
% v3 u3 r! ~5 Q2 w# X* K1 C( j- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法% R- j4 E+ w7 h9 n
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法/ R1 s( k: d& m9 _8 A# B4 V* T" x
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法 U9 J0 s; R2 G U* y( f
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
9 a/ C$ o j3 R2 G2 p6 g.htaccess方法( w5 s9 e9 U+ c( D: J% t3 u
在网站根目录下的.htaccess文件中中加一句
4 g1 s/ _/ R ^4 H8 }) M6 i8 v; F6 Z- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
; G1 ~" R; z: ]; r( o: ]IIS方法
! E# I0 `( h2 t; u在web.config文件中加- <system.webServer>% {( T8 H u% u* H
- ...0 U2 t6 P" c) n
- <httpProtocol>2 l& h( x. r; j6 j) ]0 h
- <customHeaders>3 I1 f# Y$ b" }: A
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 7 I5 f7 r# H; a
- </customHeaders> 5 T4 @% E V' ~* z2 [+ Y6 \
- </httpProtocol>
7 ]4 ]& V2 l+ o* ]- r+ G - ...6 f/ g1 ]' }& ?; ` D- H6 e6 c( N& f( T
- </system.webServer>
复制代码 9 }- Q b+ o, D2 E2 Q
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
2 Z, J' k/ Z- C* u: [0 x5 L! S* _& {+ D3 }
3、推荐解决方法。
' v3 h4 p/ T4 O2 Y4 F1 }/ m' M- <script language="javascript">
1 b' S0 y. o! M& `5 s% u- I( I - if(top != self){' b- ~( [* X9 J+ F9 p
- location.href = "http://xp6.org/iframe.html";
; g9 b: n, \* X- d - top.location.href=self.location.href;- n Q5 q3 o# J5 E
- }
# |8 I9 p n/ R" S* v$ E - </script>
复制代码
- t6 a! M6 F3 d' ^1 h将上面的代码复制到需要屏蔽页面<head>里面加载。
% \% s* g+ ~* H# K制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。 C; w; C* O: N3 X
原理:
9 a9 p0 l, R. z2 P- V y5 i第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。. i7 z1 j0 n2 ^0 z% n j+ x4 @1 E
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。; n1 g6 i3 P( d5 V. v; o- i
目前测试这种方法没什么问题。/ H$ {: ^4 q/ d
, v \% ?$ i* H$ l |
|