|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。* T# `9 z; r j$ w! R G
这次讲一下如何防止自己的网页被别人iframe。
F1 y/ g/ W+ K1 W! R: s
2 i4 R/ ?* N A6 T. k( @1、这些方法都可行,但不是太可靠。
6 _' z, q. M$ e6 V: ]4 L% M- <script language="javascript">
0 i9 c- E2 `" d5 d+ u) a - if( top.location != self.location) top.location.href=self.location.href;
6 I& Z) J. R; o0 g( ^ - </script>
复制代码 或
( u% d6 u& R+ F2 f( h' Q- <script language="javascript">( q0 Z- Z9 w. x+ u6 Y: B5 s4 v" v: R
- if (top.location != location) top.location.href = location.href;
" y1 @6 y/ U$ B6 V) ^$ r h3 K( q O - </script>
复制代码 或) L) ^$ _+ o r0 Y
- <script language="javascript">; y7 n8 m7 D9 z1 s
- if (top.location != self.location) {top.location=self.location;}4 W$ B8 n3 ]4 H8 u: l( Q% m m1 c! d4 c
- </script>
复制代码 或' s7 R0 l* v5 L
- <script language="javascript">
" t; p% o/ `$ H' d9 \6 J - if (top.frames.length!=0) top.location=self.document.location;5 D; P+ O4 _/ F: c+ D, I$ f* G& m
- </script>
复制代码 不可靠的原因:% A& T t7 L5 E2 P# S% |
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。+ q( i" ] P& r2 W( ~
- <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>
$ Y, O4 P8 R# ~ o C - <script language="javascript"> 7 a: y7 K- i, D% Y" S4 S1 w
- var location="";
p7 b" F* E4 X0 N1 [ - var navigate="";
1 ]1 r# _ \, g - frames[0].location.href="";0 w# N/ j+ w& R# g2 c( @$ r' b/ S
- </script>
复制代码 或" M8 s& G; X0 N$ s4 M9 M
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
+ N; p6 j" h k! ^! ?
6 f2 @8 H$ x% b7 ~- x+ l- <script type="text/javascript" charset="utf-8">
6 O4 @1 P, A) P3 F - 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>');3 _5 `2 T" \3 Y9 |" b3 D% `, o9 o
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
! z Q# e, O: G+ p$ YMeta标签方法
- W" z5 D" f( q- q5 }3 u- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
% F) V* }) f9 a/ T1 |- S9 t3 R! S- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
+ i4 x% O* R7 c" @4 O- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法9 q% d5 z: } r. [9 w H
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
2 ? l: M3 u6 z1 x.htaccess方法( q, C/ `& R* \8 e# W% J
在网站根目录下的.htaccess文件中中加一句
* H1 k- m, d4 d) U; R- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
( z9 S, f: Q* c( h. ]' I8 k( LIIS方法3 \ }" b3 u4 f& _" N" w& B
在web.config文件中加- <system.webServer>
; D6 _ h8 }# Z" B- h - ...
" I4 ~. j! V2 i ?4 L - <httpProtocol>
) k8 Y" T7 `) `* i - <customHeaders>" P" V- }* U7 }
- <add name="X-Frame-Options" value="SAMEORIGIN" />
+ F+ G+ K0 |4 m - </customHeaders> 9 W5 S+ G6 r& U$ C% j
- </httpProtocol> $ D- y; }% R( q6 a$ O" |
- ..." p$ \" C) D' c0 K/ b5 n
- </system.webServer>
复制代码 8 |: f1 Q( ~! P
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
7 i; w) D4 u, ]8 l2 H( {7 Q, b1 K8 x
3、推荐解决方法。5 @4 s( g- S' T3 F
- <script language="javascript"> 4 w# \# u2 b( @( E1 `) G, V
- if(top != self){5 I1 C; K9 d- _1 \0 I
- location.href = "http://xp6.org/iframe.html";
1 B: h5 l: l6 w( X - top.location.href=self.location.href;8 d1 ?1 }: O# L% `* q' R
- }
) ?0 A3 K) K$ ~( G3 \: ], e9 W" l2 h - </script>
复制代码
, u/ M$ e: Z+ O$ a }! ~1 S将上面的代码复制到需要屏蔽页面<head>里面加载。5 u( P2 v( a; X2 K3 P5 E
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。# B5 N( X k) V( H# `
原理:
3 Z5 t: U% }6 g" O7 e) ~4 D第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。( m( U1 U/ c" L/ c) R7 q
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
7 O: U6 w: I2 s; g( m7 N目前测试这种方法没什么问题。
! N( B; P) z, W" k0 f
) i4 Z" o Z- U/ j3 q |
|