|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
# b$ d3 u1 `* O' {这次讲一下如何防止自己的网页被别人iframe。
. D; v1 @8 z" F. t2 r# d- P }1 W; K# e7 U
1、这些方法都可行,但不是太可靠。* B' g- D; L/ z9 u2 j- t( h9 {
- <script language="javascript">3 M5 Q ]. V1 ^4 X
- if( top.location != self.location) top.location.href=self.location.href;6 y6 c6 L, w* T- C
- </script>
复制代码 或: w/ Q. y/ s& a$ E8 X0 y& v+ L9 Q
- <script language="javascript">) W* L3 m/ T. P4 h) E8 ?& ]/ v1 q( A
- if (top.location != location) top.location.href = location.href;1 ?$ a$ x1 d) d
- </script>
复制代码 或( g, \6 N; J% E! P$ }
- <script language="javascript">
0 _( ]6 _) ?/ @ - if (top.location != self.location) {top.location=self.location;}
$ Z9 y- n% g1 \$ j4 \ - </script>
复制代码 或! B: Z1 o) \1 s# {- n( c) r& U
- <script language="javascript">" V) V* K; J5 }8 @ T
- if (top.frames.length!=0) top.location=self.document.location;
+ w3 e1 p# m% t) a" [ - </script>
复制代码 不可靠的原因:" j F4 b; B9 @! y
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。: t8 `0 k0 Y5 t6 {( d+ T4 K
- <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 R# u% u. {& m. E5 `2 }( |; | - <script language="javascript">
3 G" O: H: V( ^" f9 j( Y0 G - var location="";6 j' H5 ` C2 \$ A( }
- var navigate="";
) V# g) f0 c! o( A$ B/ X# Q Y - frames[0].location.href="";
- A, F* I: X) u7 g% g - </script>
复制代码 或+ I, O" I) f) J) y, T
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或 i# G$ m0 Q6 p& c# m+ c
9 D$ G4 l6 {+ a! B; }- <script type="text/javascript" charset="utf-8">" T% F: _- z- _% h7 [
- 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>');
0 T1 w# d0 H ~# @ - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。6 i8 |3 D- N' u! ^
Meta标签方法9 O2 x2 m0 R4 g( N: q* D) A* [
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
) T0 W/ o& b$ k5 S; Q- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
: ~/ b7 y7 c4 O ]+ M) z- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
! B: O# n3 U! ~: l$ s; q- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ; h6 K/ g, z3 x( o, T
.htaccess方法
+ @ W8 }( |% l; m" a9 _在网站根目录下的.htaccess文件中中加一句0 O# _! ~; C7 D
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ( i4 \2 B3 i! } Z) Z& G2 t
IIS方法
. B E& y4 y- T9 p; j( G在web.config文件中加- <system.webServer>( K0 M+ X# I, w; o
- ...
; q& t- k% ?/ l3 ] - <httpProtocol>. C2 R+ W9 Y/ i
- <customHeaders>8 @( |" n9 a& Z
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 0 y# ]* b! Y2 I$ K+ v3 H: g
- </customHeaders> 7 I4 a. n& X D5 K l3 Z2 X
- </httpProtocol> 3 u2 E2 W) I- e# J' S
- ...- P, H+ O8 \' e/ [& ` y: M8 P
- </system.webServer>
复制代码 + c9 K, n( [- _5 B: C
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。% i. n* `& A' O$ _( N
9 r0 |# F( P0 w) J0 Y
3、推荐解决方法。- K9 u7 U3 g. G5 T* M' ?; L% h- [1 F
- <script language="javascript">
( o5 F' E6 D7 M6 a, e8 m - if(top != self){* X) u8 {/ k0 d' A+ r S* U F: D
- location.href = "http://xp6.org/iframe.html"; . N; Y3 s4 Y5 J! j/ L8 e- ~
- top.location.href=self.location.href;
2 Y. i# L1 D* U7 Y - }
+ N# n% s+ t% G% u - </script>
复制代码 * W9 O- e0 k; r8 V4 R4 N
将上面的代码复制到需要屏蔽页面<head>里面加载。5 ?0 z+ B- Q3 h
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
\* p& Z% w% ~* n, P3 |' a原理:
M1 B% g" M% \9 T7 q9 J. o2 k第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
) c9 T1 Z5 g) ~第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
7 D2 d' u2 G3 ?目前测试这种方法没什么问题。) ^; I: ~- z6 Q- T
& w8 o1 k- R& ~2 L. t5 a |
|