|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
) `' @# \$ J9 b这次讲一下如何防止自己的网页被别人iframe。
/ H+ m6 H" M) _( x/ C) m
% m b) k$ m7 C8 e4 x. z1、这些方法都可行,但不是太可靠。
( x' x* t& S5 f1 B0 w6 q( w- <script language="javascript">( z" }& P+ B: `0 b* F- Q2 O
- if( top.location != self.location) top.location.href=self.location.href;$ ~2 F" U6 m7 V0 B0 s
- </script>
复制代码 或
0 B1 a, x* Q/ \) M; F+ u K, O- <script language="javascript">
+ p0 T2 \4 i; K! a6 E' U9 I - if (top.location != location) top.location.href = location.href;: K; [: j. @/ L; m* P! c( N" b7 I2 T
- </script>
复制代码 或
5 L' w3 u: t% e; h1 y, G- <script language="javascript">+ J9 [2 Q$ Z8 g+ K
- if (top.location != self.location) {top.location=self.location;}
( V/ o1 c) ?( T% [! Y( ~4 I - </script>
复制代码 或
9 l6 h# ~1 v7 Z; |8 _- <script language="javascript">
4 G* F1 i" s5 q! K1 } - if (top.frames.length!=0) top.location=self.document.location;
, A' Y, O) U& ?4 \ - </script>
复制代码 不可靠的原因:
# q# p2 d7 Y8 q当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
8 }: K, h3 O7 d/ V; k+ D2 j& _4 {- <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 ^1 Y( |8 T$ r- |1 }5 M" a - <script language="javascript">
) {/ B2 S, E% C P+ l1 ? - var location="";% t! M1 ^ i+ ?
- var navigate="";
( U$ t% c2 r z" S5 U - frames[0].location.href="";) g. r4 K% X0 a# Q- f
- </script>
复制代码 或
; e- Q! [/ G( @, C1 J- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或: H; P$ q( M: R# h ~$ @0 m. Z
) R1 N, L' ?; S( p9 U- <script type="text/javascript" charset="utf-8">& X% q+ d4 @; k! o0 Z. Q
- 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>');/ Y; K, S5 R5 Z5 [7 ]4 X
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。( |1 t4 p3 o- ^& W
Meta标签方法8 U/ c S, S" L- D0 t
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
/ V% j5 _: X# f( V- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
7 H9 R$ A. z+ {/ N- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法$ Z- `3 `6 [, k: T" D& y5 x! e
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ! L( d* O K2 T2 i; k5 {+ E
.htaccess方法
/ E$ F) _1 b! m- g6 m在网站根目录下的.htaccess文件中中加一句5 ]/ r1 c! D1 J1 E* R
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
: ]& X3 W/ N8 v- `, a1 N5 e+ p) ]/ t; _IIS方法$ _$ J& O0 e( R. f6 p" ~) ~
在web.config文件中加- <system.webServer>
0 q0 g5 J; K t! ]- d0 L, v" X - ...
/ ]( U4 M, ?! U' z/ t7 C6 f' V) e - <httpProtocol>
" r4 @# n& D. B - <customHeaders>: b2 c5 N3 S7 y
- <add name="X-Frame-Options" value="SAMEORIGIN" /> % R. B [: Q6 I' D+ r
- </customHeaders>
! d/ w9 f) V K! p - </httpProtocol>
1 }4 s* Z$ X. F2 e' i- a6 ]9 d9 T - .... }& m! G$ O: _2 ?$ L) i2 z" |; J
- </system.webServer>
复制代码 * N3 n& n+ A# p" B
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
6 _ v! Q# O$ L! z5 |) r* H
$ ], ~! L3 u0 p+ J3 u1 I3、推荐解决方法。9 Q. [: `; i: q' F4 _6 [+ c8 e7 R
- <script language="javascript"> $ C5 @1 ?2 }7 @! m) G0 s
- if(top != self){6 K6 o. q8 I; _ l5 P
- location.href = "http://xp6.org/iframe.html";
* o) n, p9 t/ h; I' I - top.location.href=self.location.href;
% B/ V2 a6 K" _+ l5 T4 S - }
0 ]$ c) r P) F$ a3 y - </script>
复制代码
6 e# S: Z, H7 X: U5 R将上面的代码复制到需要屏蔽页面<head>里面加载。3 ~: d; \# A& Q: y( |, k; e& d6 G
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
! u2 _) V5 F$ Y3 D0 }2 {原理:
2 Y4 v$ Q, d0 Z& K# h0 I6 `; z第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。# f/ W7 g _2 l- H
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。! O' U* `' q' Y% X
目前测试这种方法没什么问题。3 a6 C8 i2 @3 g% e( p
+ q) p2 c0 {+ D' N9 D
|
|