|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
% K& l' x- i6 L3 b' w6 `. g E/ \这次讲一下如何防止自己的网页被别人iframe。1 h, `: |/ `1 q3 T W
3 l' n/ m% v3 w. i# M B1、这些方法都可行,但不是太可靠。
1 @3 e5 C( y3 _; H0 `- <script language="javascript">/ B6 h) Y3 F2 z# \4 f
- if( top.location != self.location) top.location.href=self.location.href;$ v) x7 d ~ l, T- f, H2 L
- </script>
复制代码 或: F! l8 N2 e* z: F! g/ j! f& W
- <script language="javascript">. t, B/ i- a0 y, z$ G
- if (top.location != location) top.location.href = location.href;* L* j1 |. _, c! \
- </script>
复制代码 或
2 j' y5 T2 x5 |- <script language="javascript">7 Z2 d" L0 U _$ s3 b% [& T) m1 q
- if (top.location != self.location) {top.location=self.location;}
. o) y! {) ]( f! c+ z; u' y - </script>
复制代码 或 o% G3 j0 J+ D! a2 f$ N) [. v3 A% A# g
- <script language="javascript">
+ E! c( ]4 m$ Z: ?) ^' H j1 _* h - if (top.frames.length!=0) top.location=self.document.location;
1 p& S W3 v+ E2 ~) k) u - </script>
复制代码 不可靠的原因:
" z8 O* a3 f8 u当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
$ N% u3 o h, 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>
4 X: q6 X D f. v - <script language="javascript"> " g# u+ M: q6 h* |3 N; b, ?
- var location="";
% g' w( Q8 G2 \! K5 Z2 \ - var navigate="";
2 n* _% |5 w. H, O3 J4 J+ Q7 F5 { - frames[0].location.href="";
: q; B$ \, Q4 \/ x' E4 l - </script>
复制代码 或4 e" J! O. [: G
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或9 i% b3 H% Y! V$ f: p2 I/ K
- m- d! v* m9 w+ d/ h- <script type="text/javascript" charset="utf-8">
! J4 N0 u; ^+ [% 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>');
1 R( J/ X% }) [* g5 s: p4 M - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
$ X9 U }! k8 UMeta标签方法2 F: I4 M8 z8 }+ V9 k; ?- m
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
- y! ~( m& V( ^! `$ ]7 C) }9 L7 B- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法) V8 W2 E8 l/ s
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法9 L. w6 Q6 n8 M
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
9 t, g- ?! s5 K.htaccess方法
- {' |/ ]! m2 O x0 A在网站根目录下的.htaccess文件中中加一句
' w) U5 ^! r- ?. n. e) B* z2 B- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ( @- Z+ \! X! v
IIS方法9 q9 N: t$ ^+ G" r/ e3 V& p4 o
在web.config文件中加- <system.webServer>! q0 s1 { c5 j. D, J/ v u! o. l' `
- ...1 [- z: P+ a' R3 |& X* \4 v
- <httpProtocol>6 p q; R: K+ F* p# m5 p
- <customHeaders>7 t" ^5 |# Z. q/ e7 h+ E
- <add name="X-Frame-Options" value="SAMEORIGIN" />
4 e0 w! F' @( ~! t - </customHeaders>
' R) j% e$ i9 B- j: F2 \7 Q - </httpProtocol> / {$ M0 w, f+ Z" j% n% V+ d2 t
- ...
& Z9 x( F; ^$ v: [& i - </system.webServer>
复制代码
. b1 T( N3 N# r& Z% C之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。9 H. w' T; ?7 T
4 y2 J8 B* U- a5 O/ c9 S C$ z5 D# K5 J
3、推荐解决方法。
. `! z% a% W! @5 r: s1 a- <script language="javascript">
# F e' r; O4 C4 T - if(top != self){
$ V' K8 I" f* B* v$ j8 X" D( [ V - location.href = "http://xp6.org/iframe.html";
7 _3 x+ D' D+ w- c# P" [' ?' Q - top.location.href=self.location.href;
# j% Z: U" `" a' R2 ~; F - }
8 ^) u0 Z- Q+ l R: _4 C/ R' p1 f/ q - </script>
复制代码 2 ?* P3 H6 q3 @2 e! J1 E% x. T0 ^
将上面的代码复制到需要屏蔽页面<head>里面加载。9 C3 Z# }5 k) X0 ]+ m( B7 a8 _
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。 `$ S8 `* r+ _/ g, N$ {. R' O
原理:
* G( c4 e; d1 k3 j0 n* s) T第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。( P) `0 d P o- i! u+ f, s
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。2 `" T6 T4 u& Z6 s
目前测试这种方法没什么问题。
+ ?$ u4 w# M' m+ U! x! z' M" G( |' s: ]6 i
|
|