|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。: }1 Z' F0 l1 d- @, E! K) J) F
这次讲一下如何防止自己的网页被别人iframe。" P/ k6 v' [0 o: {' s. B
# q! z4 F y& ~1、这些方法都可行,但不是太可靠。5 o" V# t& `) G$ l1 B- |" ^& {
- <script language="javascript">, ?8 `+ }* a1 \1 c$ R
- if( top.location != self.location) top.location.href=self.location.href;1 @+ S- h# J$ U
- </script>
复制代码 或
# H( U# P/ |) f+ c, d8 Z1 v- c7 [- <script language="javascript">+ W; ]* l% y/ n3 s. u7 w1 X
- if (top.location != location) top.location.href = location.href;# a% s1 v# t9 r/ }/ D% J( o. x
- </script>
复制代码 或 S. d% \2 E' o7 l, W/ s2 J: s
- <script language="javascript">6 H- P4 M- {) a
- if (top.location != self.location) {top.location=self.location;}
/ X% R% @! E* u - </script>
复制代码 或
. t9 v; b- l8 s7 |; d# s' k% [% b; g2 w- <script language="javascript">
# [5 `3 n" J# e4 [7 J - if (top.frames.length!=0) top.location=self.document.location;4 A3 [) k( X0 F2 d1 @$ D8 {
- </script>
复制代码 不可靠的原因:. J+ `" F- X7 H4 C7 r4 s2 v
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。; n H9 v# M+ Q$ A
- <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>
9 A. b% ?# V' h+ T - <script language="javascript"> 4 d3 `0 h! A) i# f1 O* j+ H
- var location="";$ z$ }9 m9 o1 S8 U! K J, Y
- var navigate="";4 c0 G$ {2 o2 U+ R
- frames[0].location.href="";+ ~% a" u& u" z8 Z6 M; E1 m
- </script>
复制代码 或: L( D( p; f; i! [# s5 t+ O
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或8 y# S* L" e3 e( @! I9 a5 L
" W/ T: l5 h9 E
- <script type="text/javascript" charset="utf-8">
; [- W' f9 V- X7 A, q0 h0 Y - 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>');
) ^$ U$ n7 b) ?* B5 W1 Y/ {7 Z - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
* o( i6 S" l1 E `4 qMeta标签方法
: Z) [/ t# z* W2 ~$ Y) K2 D4 R0 x- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法; M+ C* j2 m+ c; g! I* Y# n9 }
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
7 Y5 M$ ?/ G, w$ y: `' J0 i3 _8 {% o- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
3 a5 H5 U, x: K5 X- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ' Z- N* V. ~( g( V! e2 w- b
.htaccess方法0 X$ K! T1 I. c4 c1 ~: V
在网站根目录下的.htaccess文件中中加一句: T4 A7 ^* W, P( L
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
" v, s& t$ Q- ]. \: {$ _IIS方法
/ p1 D* e0 m8 K在web.config文件中加- <system.webServer>' I' u! x7 e+ _( G f1 U& K
- ...
+ m, n) i4 I% c: @" q - <httpProtocol>. `+ G' Z1 t/ K U8 ]0 h) x* M
- <customHeaders>* U+ K) S5 J/ _% |) f
- <add name="X-Frame-Options" value="SAMEORIGIN" />
7 A3 y) a0 U: s+ B. t( N - </customHeaders> ' @6 C3 E9 g3 G, `
- </httpProtocol> . P, _/ ?; A2 \# n
- ...
% v5 Q2 I3 {) @& y& V - </system.webServer>
复制代码 ' F/ P- G4 y% B2 h' g ]8 A
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
4 p3 c9 ~7 Z! J3 T7 b2 c2 H: }4 _
, j1 D3 S9 Y" D3、推荐解决方法。
- ] }' T3 i" v! W2 r- <script language="javascript"> 8 b* v7 [8 u \3 t4 G6 O# h
- if(top != self){
. w0 s5 D; y# I, w ^% E - location.href = "http://xp6.org/iframe.html";
/ `6 Q# e* F9 I) J: e$ N- t - top.location.href=self.location.href; _' u: F( A1 W) R5 w
- } 2 n. P5 A5 O. A; N9 |& V! G# \# E' z
- </script>
复制代码
! t- e0 T9 h' \- |5 H3 `将上面的代码复制到需要屏蔽页面<head>里面加载。; ^% { g) s: t$ d. G1 }
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
+ I3 N% x r. l1 z* S+ g原理:
`2 N5 ]. \1 X! j第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。, x3 u% [* b5 k5 }5 V, L
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。3 a3 U% D5 y6 l1 t; [! x5 P: P% V
目前测试这种方法没什么问题。$ W$ w4 c, H2 T! e) M
0 J" H+ `( I Y* \% q |
|