|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。# C$ h' o! N. e0 Z+ J
这次讲一下如何防止自己的网页被别人iframe。
- m) d! R- s8 }, q) g) r( P& ~6 v4 E1 l
1、这些方法都可行,但不是太可靠。
! J( P4 h$ s* t Q( C& c- <script language="javascript">% u9 m. Q! R; o8 E, \
- if( top.location != self.location) top.location.href=self.location.href;5 ]( Y# a, b6 u1 ]) o
- </script>
复制代码 或
/ u/ ?0 _, U3 u4 [6 u& Z- A- <script language="javascript">7 i3 i& u& z6 d/ Q b. O
- if (top.location != location) top.location.href = location.href;8 R* c4 w: O6 Q$ h; d0 R) m# o6 m- I
- </script>
复制代码 或8 a! w- r5 b+ g$ ?% V- H4 H1 B
- <script language="javascript"> P6 W. A2 G2 h. b: C; q5 ]) ?
- if (top.location != self.location) {top.location=self.location;}
$ D; W& i3 s5 w: Q - </script>
复制代码 或- }3 _1 L8 G% p# Y; J, B# B% v
- <script language="javascript">
, H$ I7 D) r1 I( R - if (top.frames.length!=0) top.location=self.document.location;* o( Y8 H s; y
- </script>
复制代码 不可靠的原因:& ] N4 |5 J# F% f* b. {, v. j) h
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。4 i. ]# |6 f9 Z: e: p( p5 O9 \
- <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>
3 ?( z0 {4 B4 n d - <script language="javascript"> 2 i" Y6 ^9 ~' E! i6 _: J
- var location="";+ l# n# J W; P9 z# K+ q
- var navigate="";4 l4 r' P+ E# Q1 Q `1 W
- frames[0].location.href="";
' _; Y! |' {8 U - </script>
复制代码 或
P4 h1 ?$ |4 j ~" V8 t+ R1 W* F- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或3 ?9 j9 O0 }: }8 y7 f" I
5 I' y* q6 c9 k" t- n& n, @
- <script type="text/javascript" charset="utf-8">3 A0 r; H1 ?( l. B" 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>');
; L$ O9 k% O6 Z2 ~( o' B" A4 d - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。6 O2 u: ^6 e$ ^ `8 i
Meta标签方法9 ^; _$ d$ [$ B0 d7 r5 }! |6 b* v) e
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
+ F$ l% R! O, G/ n$ y- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
$ ^* c0 d+ { W) [! X. b- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
' }' {' ~0 H2 u! f) d- add_header X-Frame-Options "SAMEORIGIN";
复制代码 7 g- T$ L/ m1 H' ]* \1 U' E
.htaccess方法
# Y; Q4 i0 B$ c7 t9 T# g9 g在网站根目录下的.htaccess文件中中加一句% Z9 r$ g& }7 @9 F6 `7 q
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
9 b& p& q6 j4 F5 XIIS方法
" A# n, g6 P( e* r/ s5 @5 M' y7 y在web.config文件中加- <system.webServer>
( b9 W8 I( s9 B7 k/ p- \: C8 G - ...+ }$ m9 d' {/ f3 k) [ J( }
- <httpProtocol>9 Z) Z+ I4 s% L' g" R( A8 W4 z. l
- <customHeaders>
% r0 v; c0 ]( s - <add name="X-Frame-Options" value="SAMEORIGIN" /> ) W; x! j1 ]- e% m( p2 i
- </customHeaders>
7 k6 A( z3 a1 i/ @" x+ O9 R, i - </httpProtocol> ( v% b4 Z% w8 v3 Y
- ...
/ D6 |3 X' s6 D, ]: m - </system.webServer>
复制代码
% l' h3 [0 Y8 ?# Q2 }) p0 r之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。# P& U; d$ R1 {2 g% L
! a; C" U$ [3 E" O& u
3、推荐解决方法。
( q+ y; k u) `4 M- <script language="javascript"> - ~" @) O1 j# i0 m/ s
- if(top != self){- ^ r) Z$ H9 P% e4 h' e7 B6 e# }
- location.href = "http://xp6.org/iframe.html"; " I- f8 I6 b. o/ g f. f6 |/ D- y1 @
- top.location.href=self.location.href;1 b1 X! x5 x; X1 m+ B4 i$ @$ ^4 T
- } 1 L( e) y1 O, C: Z7 N2 B. c
- </script>
复制代码 * D. q! F8 L+ n/ w" p1 p
将上面的代码复制到需要屏蔽页面<head>里面加载。0 j3 N4 m. v- i; V. }
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。 Y% Q! u/ Z d9 l
原理:8 z' z8 o1 Q; X: A) T4 s
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。3 Z1 L4 w8 M" Y8 w
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。7 D4 W- B8 |! Y$ i, i
目前测试这种方法没什么问题。+ d5 y' h; U3 I9 |
9 k$ c$ U$ X$ I
|
|