|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
1 U3 o' Z! I9 o, P% Z这次讲一下如何防止自己的网页被别人iframe。 S& d9 s' _7 a" X
% R1 l0 |" {4 P) H" Q
1、这些方法都可行,但不是太可靠。% w$ I: a# z4 Q* H
- <script language="javascript">) ]8 H) p& k2 W S3 }
- if( top.location != self.location) top.location.href=self.location.href;9 T( {0 k) G" x: z% `
- </script>
复制代码 或# Z% \ n& S0 J1 L! _9 p" J
- <script language="javascript">! O) O# d, @4 E8 ?' i( ?7 m
- if (top.location != location) top.location.href = location.href;6 A( C; d/ n6 T* b8 r
- </script>
复制代码 或
5 t7 F9 `& a/ i+ y" T; e3 U6 p- <script language="javascript">
3 g. M6 C$ a# T. `$ h* M - if (top.location != self.location) {top.location=self.location;}
3 Y' }& J8 y1 R/ D2 G - </script>
复制代码 或5 F' p1 a! G$ H, X5 o3 n+ ?' D
- <script language="javascript">' ]' V5 X3 ~! b" w# J4 _( G
- if (top.frames.length!=0) top.location=self.document.location;
, [6 F( ~+ w5 M+ b$ t( J. ^1 t - </script>
复制代码 不可靠的原因:
( t) e9 z. w! \& j3 a当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
5 \( A) E# U, w% @0 |4 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>
3 J' _6 ~% Z7 @( L6 ]! b* s4 G5 @; Y1 J - <script language="javascript">
7 u& S0 o6 V" D9 c - var location="";
6 |4 v( ]. H4 o - var navigate="";/ K: M: C3 `6 D7 K
- frames[0].location.href="";5 U: k( k2 P% \* e: S: w8 U
- </script>
复制代码 或
* P4 F9 ^( p- f& n, R6 ~" ~- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
- U: z3 d5 J' p* s% O
' e, P9 n: M. l+ p+ s2 y2 C- <script type="text/javascript" charset="utf-8">
. D- z# B" c* Y; O" k' m( J - 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>');& m: [, b1 ^/ s4 p/ T3 q
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
; _4 ~3 h( a! _. P; I* |# jMeta标签方法
( s6 u' j/ m+ }9 M- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法6 P, z6 J" s; O/ ?( C+ K6 ~, p
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法& D d$ ~! S( v0 J6 C
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法7 ~) f: y, ^) N
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
2 F3 k% w. ~. u' a# \% g.htaccess方法
. g5 f+ [2 w* c: H1 E7 R; w在网站根目录下的.htaccess文件中中加一句; k4 _# G6 s u6 V
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 5 T+ b a4 q* }6 u
IIS方法5 N' w7 H- ?; p. ~1 x- k f* l% S4 I
在web.config文件中加- <system.webServer># U1 B! }1 E0 A! |6 g
- ...' ~! r9 x5 u/ o; \; A' K
- <httpProtocol>
$ Y5 {# o. r1 G v8 B! j - <customHeaders>
+ a; T: H( n" S; y) ]6 P8 O - <add name="X-Frame-Options" value="SAMEORIGIN" />
7 `; k4 }4 z1 W' X4 x u - </customHeaders> 1 ~, P5 T. F0 H! Z$ z' V: Q
- </httpProtocol> 2 _- ?8 [: ]6 M5 Y
- ...
% W X; g |9 {4 `' e" b r - </system.webServer>
复制代码
5 Y# S4 O7 t' \: A' R( Q' M之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
% m4 f' _' e! U: t8 {9 y* K2 M
' y- ?# d( S# Y" b: d3、推荐解决方法。
& Y$ c( q' J. i4 h+ v- <script language="javascript">
, J: I, F1 t1 M! d5 H5 p1 R- P - if(top != self){
: H& c4 q# R s1 |9 J - location.href = "http://xp6.org/iframe.html";
g; s# _' e, I4 d+ M - top.location.href=self.location.href;2 E4 @4 ^2 U9 _3 q) x4 m
- } & }" Q) A+ D; W, w& c
- </script>
复制代码
0 _1 l* O% E' y将上面的代码复制到需要屏蔽页面<head>里面加载。! D( }8 j, _0 Q* O2 r: @
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。/ C! j+ a- G- ^1 p# X" `
原理:. v7 I% p& @9 h) P0 o
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。1 [/ E, V2 S8 L7 N6 b3 H
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
" o( _+ o. B$ w- x5 V# ~目前测试这种方法没什么问题。
& f; { {) R8 P ^- }/ l5 R e5 {, G- c5 _0 R! {* _: Z
|
|