|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。; t* Z! r/ c W5 e0 Q2 X9 i
这次讲一下如何防止自己的网页被别人iframe。
+ `* ?) H& O* `5 |9 K( Q; Q" M3 N
! {3 [; e0 W* |. C* l" B$ K9 ~6 G1 e1、这些方法都可行,但不是太可靠。; c7 i3 F; u& R o: s9 _; K
- <script language="javascript">/ h+ `% r- r# s4 a1 k
- if( top.location != self.location) top.location.href=self.location.href;; C/ k$ b" O9 @# Z
- </script>
复制代码 或& g! w, _2 Q' Q
- <script language="javascript">
( b$ A/ C8 s- f! M! A - if (top.location != location) top.location.href = location.href;
, n9 l7 h# {- w$ g/ L% }! `! p* { - </script>
复制代码 或
6 z4 r0 T& }0 F U9 n: s' t- <script language="javascript">
/ l( u+ d0 a t' `3 t# W+ [2 X4 k - if (top.location != self.location) {top.location=self.location;}1 G; p8 \' F! J; F$ L. k0 ~
- </script>
复制代码 或
6 r' ?& p- W" O3 O+ |' f- <script language="javascript">0 f5 t! S5 R/ @ M- u' t
- if (top.frames.length!=0) top.location=self.document.location;6 Q! J9 C8 s2 f7 x- ?
- </script>
复制代码 不可靠的原因:, D- f2 a, F0 P) {
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。" s' ?+ W# g+ w5 i. `
- <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>
6 A7 `. k7 N- r% z& e/ z3 w3 l - <script language="javascript">
3 l8 ~/ s- f4 {0 Y9 r3 f - var location="";
4 z; T) r* L2 J' E- a' A - var navigate="";+ w$ f0 J7 m) }( r! g- \) e, A
- frames[0].location.href="";
5 T) r. ?) h8 F, X - </script>
复制代码 或
6 L( T S; l* @& }& j2 A- n" a- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
. B; E7 D- E0 ~( j" g& l& j$ Q# J1 s2 P; Z. _" P) m0 t4 Y
- <script type="text/javascript" charset="utf-8">
7 N) t& q! ?# {# N! L 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: N4 |2 v& L9 b: r6 l - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
) Q% t/ j/ ~- ~" N; v0 i3 hMeta标签方法6 |: y/ Z4 D3 W; |" Z
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
* r5 t; x* o v5 i, b- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法- x: q0 ]2 R0 A% O
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
- ?3 A4 q! w- F& Z$ E+ F* \- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ) n5 r/ p+ {0 x8 r
.htaccess方法
" K( t/ i! B8 v, v- W在网站根目录下的.htaccess文件中中加一句
7 s. r3 w- w4 \- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ) k# t8 Y( J# U- V+ O+ @+ J3 T# K
IIS方法
2 O# t5 _! X2 q# Y' _在web.config文件中加- <system.webServer>; G+ o8 j9 `$ l* o) s7 b
- ...! q/ N- E3 Q4 s5 |9 ]; x: L; t
- <httpProtocol>1 U! Q4 R% [$ }9 `0 u4 F8 t
- <customHeaders>
; ]% q; }+ k* L/ o$ L9 @! V R - <add name="X-Frame-Options" value="SAMEORIGIN" />
* ?$ M& k( E+ N" A - </customHeaders>
7 s) G8 J+ \0 M) r+ X/ B - </httpProtocol>
# O# _ C9 f4 J7 z x7 N' F - ...' k% x/ R# v B* s" V
- </system.webServer>
复制代码 / {* P7 f- d8 H' D
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
: ^" w# x% s* B/ x
% B( g" p$ V8 Q6 Y6 z ^1 O6 u: {) F3、推荐解决方法。- e2 A" x# J8 t0 c+ k8 t& w
- <script language="javascript"> ! ?9 Z) r* c g' W/ b/ o n
- if(top != self){8 |" i, @7 [9 e4 z- L3 W" _
- location.href = "http://xp6.org/iframe.html"; - F! H2 e( n0 Y5 C
- top.location.href=self.location.href;
0 ?) S( A% J! ^ q6 |" U% L - }
% C, b0 h$ O: H: [# m - </script>
复制代码 3 t& `: [+ o$ I: V
将上面的代码复制到需要屏蔽页面<head>里面加载。
+ F& `( }7 w. m$ F) r制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。0 a- h5 H. Z- j' T. @
原理:1 I2 q% F5 y) S# c& a% g5 b( w) x
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
$ I ?3 K5 \% x$ T) f! r3 o# @5 N第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。; r' a! o$ w' L' Z
目前测试这种方法没什么问题。
+ E5 o3 @1 U! S$ h0 y; N1 v6 l+ d7 M2 X+ k
|
|