|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。! b# N6 U4 {* i3 ~
这次讲一下如何防止自己的网页被别人iframe。1 ?" L+ I- m' _- r& j8 ~& _
- s0 L2 J$ `- \" @& d) Q' j) m; ^' |1、这些方法都可行,但不是太可靠。
0 M, o; V( Y. o, D% V; Y; G- <script language="javascript">
/ S0 S5 N0 Z! v k# w4 m! z" r4 f - if( top.location != self.location) top.location.href=self.location.href; N4 ~- A L" |" b) m' M8 L
- </script>
复制代码 或
# T5 f, Q) W8 @- <script language="javascript">0 I. r' r# R& U$ U4 B/ Q- L( @
- if (top.location != location) top.location.href = location.href;
R; \; P. R1 h: X - </script>
复制代码 或$ x- S* g2 I* n$ f6 U
- <script language="javascript">
2 @7 ]$ K0 Z% _1 w+ z _: h - if (top.location != self.location) {top.location=self.location;}% y8 z$ b# x& ?6 z$ b
- </script>
复制代码 或
# l. I$ U' T- `2 [. B4 W% ]) f- <script language="javascript">3 A/ w' }) w' J/ e; _: w8 p" b
- if (top.frames.length!=0) top.location=self.document.location;
( r; Y& U( i& j7 q- u - </script>
复制代码 不可靠的原因:
! D5 _4 R- u$ I2 n& a6 c当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
. \2 }( z8 X V- <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>
Y1 J" x! j) I$ p! C3 p - <script language="javascript"> ' b' \2 s0 j8 j9 }
- var location="";; t5 h' B' N2 d2 u
- var navigate="";6 ?& o: m4 ]0 k$ b( E0 h ]7 Z! j
- frames[0].location.href="";
4 y' ]8 o w' _# \ - </script>
复制代码 或
% E. V( y, W' Q) G3 Q% v1 W- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或1 H# Z5 j# _& Z: v4 o! d" l) J; U
8 W: m4 f$ B, @' r+ C( ~) p: t) U
- <script type="text/javascript" charset="utf-8"># L/ K7 z8 ?0 i4 t) 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>');' R* L2 n; S. o* Q* I! H1 U9 O
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。7 P. |+ T! W# f0 l) S
Meta标签方法
* Q& ^& C" ?* _. \- C4 d0 O# O% I- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
% q& v: M' b5 q. P- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法" Q8 `) s9 r6 Z
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
' ^( A6 e; m4 S* g6 c$ q+ X& g- add_header X-Frame-Options "SAMEORIGIN";
复制代码
H* P$ M! K& a0 ?( M2 D.htaccess方法, i% j0 C/ P) W8 R; j
在网站根目录下的.htaccess文件中中加一句
! J+ d+ t1 z5 X, K- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
6 y7 d' S: J5 `! j+ I6 f! @IIS方法2 n' j: z( i' s( I) y8 A
在web.config文件中加- <system.webServer>$ A8 w% l8 c2 w8 [# l2 c7 ~
- ...% v$ E7 t8 S6 J
- <httpProtocol>
V$ \. G2 [3 p" ^ - <customHeaders>
+ E& m- C k l% m1 |0 ~9 K - <add name="X-Frame-Options" value="SAMEORIGIN" /> , h% ^+ @! Z7 j9 n* r. M/ E3 r
- </customHeaders> # x2 T3 e2 k R6 a: r) q0 \
- </httpProtocol> . F9 R5 E1 c+ ^: r
- ...
$ Y& K4 @1 g# p8 R3 f3 ] \ - </system.webServer>
复制代码
' f5 T$ o) Y+ [5 k; t, u之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。, l9 t3 `. O+ F) S, u/ }3 y
+ [5 v" f& _ q7 [6 Z
3、推荐解决方法。9 s9 K) ?! |; C ]6 `
- <script language="javascript">
$ p* J' G3 @- ` - if(top != self){
V6 S; g! E& _8 F2 J - location.href = "http://xp6.org/iframe.html"; 1 o1 D5 C* W" Y7 U9 A* Q
- top.location.href=self.location.href;
" v+ T9 W( e4 W; z8 A - }
/ e B0 R0 J7 u% Q/ U+ |9 P7 S- f& h7 V - </script>
复制代码
: A8 x: i3 K p6 A" o3 B将上面的代码复制到需要屏蔽页面<head>里面加载。
, e+ v0 }$ [, m$ P制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。' t- J8 A" T8 c9 Q: L+ W
原理:; V1 }+ ^; ~, Z6 }4 \
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。- L0 A0 q6 n- m* P! g: r8 r4 e
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。5 ]( x+ [$ [9 Z% S
目前测试这种方法没什么问题。- S. T7 t1 F' O; [4 v/ k5 M
) M+ W# \1 w$ j; M. h# S3 W' Z3 B1 x- m |
|