|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
: W" T9 E0 p k& F# f这次讲一下如何防止自己的网页被别人iframe。7 L! {7 X' m9 G+ _4 C
. I% z& T0 ~9 |
1、这些方法都可行,但不是太可靠。
3 `0 |3 @; Q+ |8 K! S/ f$ D) G; {- <script language="javascript">
J2 d/ w# k! w - if( top.location != self.location) top.location.href=self.location.href;
* h0 ]& n' `( m' F0 \ - </script>
复制代码 或6 }/ K. V2 ~6 t" B
- <script language="javascript">
# y- h7 T3 a0 F, [% S - if (top.location != location) top.location.href = location.href;
1 j( c4 Y5 W4 W& Z% [ - </script>
复制代码 或
7 [6 I' O6 @5 ~ z- <script language="javascript">
: O4 {; S% T ~) i Y( x j e8 l - if (top.location != self.location) {top.location=self.location;}" u. K1 Q6 Z/ V3 Z7 b
- </script>
复制代码 或, b8 p+ i' o/ g9 I" Z' Z
- <script language="javascript">& `5 ]$ w) B+ D8 t) q" H" ]
- if (top.frames.length!=0) top.location=self.document.location;6 g! @3 J& O3 L( P. F7 V
- </script>
复制代码 不可靠的原因:
+ \- n6 K- c p& P0 }2 m9 [ X当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。2 @7 t( }8 X6 |) y
- <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>& v8 m+ Q! l8 P8 \% ] N0 X; D
- <script language="javascript">
: G: E( k. r: |& B - var location="";) _1 Y/ I# k( |" \3 G
- var navigate="";
6 f% ?* Q; y4 p6 A7 I5 i5 ]: s - frames[0].location.href="";
) B6 N X7 j+ u/ C4 f' K, y - </script>
复制代码 或; c$ o, @, Z' `) H
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
. Q9 Z! y Z. [% z6 A( r! H7 ?
. j* F7 Q/ y/ t9 {( @- <script type="text/javascript" charset="utf-8">
: r4 d g) q0 y8 a$ O - 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>');
5 X2 D+ B: ~$ f- q1 o! x+ p& T - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。, ~0 _0 N+ a; y T- g9 @! f
Meta标签方法
. E' t% M2 l+ ~; Q- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法, X) {7 ^$ u6 C: U+ U* _- N1 T9 @
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法9 y4 Q! ~* n" `4 _6 S1 L
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
* C2 r- I* }" d! o- add_header X-Frame-Options "SAMEORIGIN";
复制代码 + e6 M: V! Z+ h+ d) q8 I0 u9 k, E& \
.htaccess方法
5 P8 Z% I9 d7 ^! {在网站根目录下的.htaccess文件中中加一句
! P& B0 P% U% w. H* m+ D1 b; g/ G3 [- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
0 Z7 B9 J9 O- D3 q7 lIIS方法+ l, \+ ^# d8 W4 }/ H% C
在web.config文件中加- <system.webServer>
/ `5 u6 D% l: `; I! a2 e! k) J4 y - ...$ ]; e% K+ }* c* K" L
- <httpProtocol>$ x2 C) q1 K8 d9 I3 [
- <customHeaders>
/ i! ^0 W; a6 B1 | - <add name="X-Frame-Options" value="SAMEORIGIN" />
. v+ k- Z' f- o7 N, ]) t8 D - </customHeaders> 1 F( l3 _( M9 k R' j$ Q
- </httpProtocol> ( a& I( ~; f: ?; B; m( b( B3 T4 H' N
- ...
) {: G0 D: j9 }- J9 f - </system.webServer>
复制代码
) r9 A" j1 M$ s- A之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
" T% V# V- U. {, U! o5 M, i @8 D7 u6 z
3、推荐解决方法。* H+ s6 `! _' g% g! `- j
- <script language="javascript"> " t' f. c4 t- R2 @, E
- if(top != self){
( h6 @( K3 E/ U- a - location.href = "http://xp6.org/iframe.html"; ; P6 X0 A( \/ N
- top.location.href=self.location.href;
4 S' a1 w; z& V* _6 H - }
9 j& u& V- E) ^! f0 w - </script>
复制代码 . S! V) @) N9 S! I8 m
将上面的代码复制到需要屏蔽页面<head>里面加载。2 r/ @9 F2 \% u) i+ g" [
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
9 l A4 _1 T2 B8 J/ X* k+ N% s原理:8 c+ \% m* X8 i( ^/ `( z( o
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
1 m; P$ C+ Q+ M$ K. v; o第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。# y- W% [# j$ ]% X2 w
目前测试这种方法没什么问题。
1 E) K9 ~2 |( h* s8 @
8 [ Q. |5 B9 K5 h; z( T |
|