|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。1 A: W3 @) J4 \
这次讲一下如何防止自己的网页被别人iframe。
j# g. v* [( a8 J2 E2 P8 u5 ?1 u% o5 h" H- _+ |+ {
1、这些方法都可行,但不是太可靠。4 u& W2 z; `. n+ T
- <script language="javascript">
( y/ |; L1 G6 {5 a: W. n - if( top.location != self.location) top.location.href=self.location.href;
2 p- k5 i4 V' ~$ i - </script>
复制代码 或
' l& c& c9 e# ?+ h2 B- <script language="javascript">
0 i: Q' [: ?- K" D# Z - if (top.location != location) top.location.href = location.href;
' \5 g, R q' y. e - </script>
复制代码 或
; Q- q0 R+ U) R3 S. x/ \- <script language="javascript">( d" \# Q! c1 E9 o& v8 d* p
- if (top.location != self.location) {top.location=self.location;}5 W# a8 A5 U' ]1 n6 |/ B
- </script>
复制代码 或
. r. }2 A$ i; u2 x1 \, B1 K7 G- <script language="javascript">
/ Q" o2 v. x5 o, E4 w& Z. V: F - if (top.frames.length!=0) top.location=self.document.location;
+ a% I# c3 c6 v; I" r8 D - </script>
复制代码 不可靠的原因:- a+ l+ J+ t7 l; G! g
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。- J; A; L6 _3 Q3 z
- <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>/ N/ f& M" E" r) V3 p; n3 d
- <script language="javascript">
3 J7 \% @9 }/ {# T' W - var location="";/ `' O+ q- T8 b5 n6 ]0 X
- var navigate="";2 i( g3 m- f5 X) H1 ?, c' ?5 D
- frames[0].location.href="";
; t& u1 L0 [& Y) _0 O" N8 c) B - </script>
复制代码 或
' w0 }1 \1 S7 D% ?- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
& C: [1 h8 c7 i5 y; G$ i# N# U( _$ V
- <script type="text/javascript" charset="utf-8"> C) {( d+ \ g4 T& G9 c
- 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>');- z( q& l. \% {- N; p) E
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
8 z6 w5 y6 W1 O7 [4 s3 Q' j% X3 ^Meta标签方法
7 d' M5 F, _" S( ?9 A! U4 s8 `& e, [2 _- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法* ?$ U0 L% E' d/ y
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
: W9 x4 r8 \, Q- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法8 r: _, M% j: u! f# d+ Y! g
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
H# r- s J X, V9 S% e o.htaccess方法
9 @- E9 w4 m( t+ y- |2 P+ Z5 q在网站根目录下的.htaccess文件中中加一句" V# _$ c8 d2 W3 W
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 7 f: l, O& D; h0 o! w& X* @. }
IIS方法- ~; u+ x' A, |8 t% x0 c
在web.config文件中加- <system.webServer>
" b! z0 q- O# F3 t+ P; s& ]: r b$ z - ...
6 }. ~6 H$ s" h5 v4 X; V3 P - <httpProtocol>
9 t; ?. k0 K2 H5 h8 v3 r - <customHeaders>
3 W) f \! V `! d/ p- T7 t - <add name="X-Frame-Options" value="SAMEORIGIN" />
! z3 S3 p: E8 M2 K R7 s$ a3 V - </customHeaders> 3 d0 D" B: j& z- B# a% m
- </httpProtocol> . Q( g1 D5 B4 W0 k& u% ]
- ...
/ T( W, [3 k# y; y$ \! r2 l - </system.webServer>
复制代码
1 p0 S/ W- e/ k+ B之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。; [7 O; Z O9 n& e4 g
) v% p/ ~( W* ~( }" F
3、推荐解决方法。
- y: |9 R9 ]7 B" U8 ?+ Q- <script language="javascript">
+ l: u# B# e, L( f, b - if(top != self){$ I$ j5 O5 x1 c' j% I! E
- location.href = "http://xp6.org/iframe.html"; L9 C2 D$ v* `$ q
- top.location.href=self.location.href;, @" d3 f$ h8 D
- } 3 ~" ?" F) s5 Y7 m* n3 `! @
- </script>
复制代码
8 \. h, {/ a8 x6 [7 X将上面的代码复制到需要屏蔽页面<head>里面加载。
9 R% i0 u! r4 @" u) C制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
! m2 l1 B8 `, l _& c原理:4 N: U0 u' W# \( e! U9 Y, L
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。' m3 `" o7 Z6 b/ o
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
) K M! X1 M3 \; k1 d, i; s目前测试这种方法没什么问题。9 t! ? t1 B4 s
" L5 b- Z8 G! C- [* I: F |
|