|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
4 G0 A% k7 I6 [" v7 X" O3 ~+ C这次讲一下如何防止自己的网页被别人iframe。
; {7 s5 j1 |" c2 y6 B/ z3 a# g8 z7 v0 _& S9 B; k/ Y8 @( _' R1 p: o C) | p
1、这些方法都可行,但不是太可靠。# ~! k: u1 {, Q; o9 A
- <script language="javascript">/ |& J' Y- l3 ^4 N: I+ [. @2 h5 ?
- if( top.location != self.location) top.location.href=self.location.href;
2 ? m+ m' B3 N. ~& p - </script>
复制代码 或
9 z! v2 I l0 X$ @. @9 n6 D- <script language="javascript">
( |$ W: p4 M6 u' U9 y - if (top.location != location) top.location.href = location.href;( W. C2 ?4 j0 }/ L& I, R( t
- </script>
复制代码 或
, [7 p8 N9 g* e0 t& h. F+ ?- <script language="javascript">: t( X6 M! ], U8 |) ]8 D' B
- if (top.location != self.location) {top.location=self.location;}
" i+ ^' _3 ^1 T# w - </script>
复制代码 或5 X6 l8 j2 S- F! C z/ d8 u# z
- <script language="javascript">, }7 ?. }# p8 ` C F6 `* D
- if (top.frames.length!=0) top.location=self.document.location;* k( e3 g* [7 N- Z, @
- </script>
复制代码 不可靠的原因:- X, S; R5 H. z
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。6 e! S; B8 Q' X& S6 b
- <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 M! ], [% s2 ^! w: ]* Q
- <script language="javascript"> ; j2 M; V1 [ y" I( Z' ^
- var location="";$ ~0 n7 d0 e7 v; L% O" M8 a
- var navigate="";4 |# b2 c/ j+ m0 k
- frames[0].location.href="";6 y1 n! H* X) d4 }9 H M) W' s
- </script>
复制代码 或: A0 k, W# ~2 e
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
4 ]. B4 }& P5 r$ P" n. s3 O, ~# _ d
- <script type="text/javascript" charset="utf-8">1 n$ y V$ R) Z' g- p
- 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>');5 O s& o0 ?( [0 M, R
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。. \0 N' |; E! {, v f! B: \* Z$ [
Meta标签方法
3 D) |0 [( d$ `! K8 G. x- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法8 J+ J+ b, [4 I
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
9 t, [! \/ ~# k& D4 d- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
p& C5 Y5 [2 j1 l% x4 E0 ?- add_header X-Frame-Options "SAMEORIGIN";
复制代码 " O: W' w0 x5 J6 t+ q# G: r# P- n
.htaccess方法/ a/ N: x: Y8 Z: G) J k
在网站根目录下的.htaccess文件中中加一句
4 Y, s; U+ P& e- L8 J0 v, c- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
; P. u6 A/ X6 {! F6 T% H( QIIS方法
; n' j: o% N9 @ O5 b! n在web.config文件中加- <system.webServer>5 h1 |* }$ ~, N# z
- ...
; I( m! J6 x1 x0 O, q5 X1 ~ - <httpProtocol>* K; j9 U2 m9 o+ F2 |) S3 w' k
- <customHeaders> C' i2 X2 y' ~2 b" f1 [2 ]) f
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 8 j/ e+ g, r) v- A/ H5 ~2 I U4 u/ f
- </customHeaders>
1 o9 D7 F5 `' Q, U6 O - </httpProtocol> * k! i) ^4 A5 q2 g$ ?3 i
- ...0 D& |; \( y9 _2 [* \4 p: G
- </system.webServer>
复制代码 0 }8 |# N+ c: R3 c
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。3 \$ j* [2 _ Q2 }
+ G0 l% L+ m3 E7 g& y( r/ n5 Z0 T5 K
3、推荐解决方法。3 o9 ?- Z* A/ L ~& K
- <script language="javascript">
% k$ [- D G- U( l. A2 J1 R. c - if(top != self){
5 r; g7 ^+ Q/ I( W) c! H9 G. y" ~* j, [ - location.href = "http://xp6.org/iframe.html";
1 O. I1 e, t+ m& z- }: |" e - top.location.href=self.location.href; A; A+ [& P" k& h
- } 3 a" N9 d# S7 {" R# D- A
- </script>
复制代码
( ]: L/ s, d b3 ]9 J将上面的代码复制到需要屏蔽页面<head>里面加载。0 C5 q7 y( {/ ?& @$ x
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
! Z4 X+ R J, d8 a, M原理:
' V- a6 n0 O; b+ m- E, |) c第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
/ C: q3 h5 y/ _8 ~第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
, J$ ^# X9 V* P3 R2 K2 F目前测试这种方法没什么问题。
7 I- H) x# f. j* H/ v9 O3 M5 o: k& D2 s8 M! c
|
|