|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。, x! x6 z( y+ V& ^$ E7 }; J
这次讲一下如何防止自己的网页被别人iframe。$ I4 g6 G- D/ Z* g
' I- _8 S- P9 U6 f) O1 U& d) t
1、这些方法都可行,但不是太可靠。
( W: O; x. {6 G. J. J( s. X- <script language="javascript">
/ S% P9 g) \9 _. i8 N& d, ` - if( top.location != self.location) top.location.href=self.location.href;9 t8 z; z- {1 B0 A
- </script>
复制代码 或
4 r+ N) d9 X% W9 m0 k$ i: @- <script language="javascript">
2 {, V, v1 D0 C( m( K$ n - if (top.location != location) top.location.href = location.href;/ L# u* Y( t7 \* _2 E
- </script>
复制代码 或% q% k6 {) g6 `7 O. Z1 W
- <script language="javascript">
" s6 r/ d6 `1 x/ k' K - if (top.location != self.location) {top.location=self.location;}' _! [( j+ V, H$ \" _; \$ H/ J3 x
- </script>
复制代码 或* v, Z$ _/ `$ |6 z- [
- <script language="javascript">8 [- }1 D- [0 X6 X3 o5 S/ n
- if (top.frames.length!=0) top.location=self.document.location;
3 S0 H" {$ O" U8 r7 o - </script>
复制代码 不可靠的原因:- }5 f9 g2 j F& |* C1 O
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
7 T) B3 J) D. 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>+ t; ~% c: c& p
- <script language="javascript">
& m8 D8 P6 `& H- \5 p, ^9 _ - var location="";
, Y% D% t! L6 A% U9 u - var navigate="";* G9 }( J3 O. x& @: P5 s6 f9 l
- frames[0].location.href="";
7 f4 J* h8 A& z - </script>
复制代码 或
8 g1 {' o1 l* l; E2 o7 V- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
2 |1 ^* k3 M Q) D3 S c: S$ O. Q( x' b+ |; n/ u. i; j
- <script type="text/javascript" charset="utf-8">
" d" T( ]! l% t; {2 t- M - 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>');
: z2 m2 @8 h! Q6 [8 f - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。" f5 ^, J* M/ _2 p: h! d( T
Meta标签方法
4 P% y& {) |7 _# b0 p7 k+ }) g- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
3 R* f/ ~8 J7 m; I) ?/ ]# `7 B- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法8 e, C' z5 `+ }5 s* [+ O
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法( y* {. R! F/ u. |! t$ ~
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
) p9 N. k' l+ k5 l/ h" i, s.htaccess方法
1 a" p7 J; p; p5 Z* {+ O在网站根目录下的.htaccess文件中中加一句2 N' m, W- X( o/ P e
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 7 I+ k" w7 p) {
IIS方法& c3 h( K- L7 p. G: T2 J2 W
在web.config文件中加- <system.webServer>& Z# j" y7 M1 P3 v1 v. S
- ...( u: U9 ^, y e$ x' z* q' k0 H3 j7 S
- <httpProtocol>
e) A' M, }/ ^% u0 L - <customHeaders>
3 W# `/ [" H( Y! j. s+ M# {9 l$ y - <add name="X-Frame-Options" value="SAMEORIGIN" />
7 Q- h% u- I% W - </customHeaders> : @, Q/ ]8 ^9 A/ D
- </httpProtocol>
: S% k" k) X$ a( l% h# }* c - ...3 h) Y$ r/ o( {0 D) q: w2 u! q* t0 l
- </system.webServer>
复制代码
! n4 u2 M" r5 u2 b# ~' i之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
2 E" g0 Z$ j: |- W- i1 A1 a' T& u5 ^
3、推荐解决方法。
7 `- m( J# k6 p7 Q% i7 c! k, E- <script language="javascript">
& y8 ], e2 Z! {5 n - if(top != self){8 J4 y5 w! v% Q; C3 Q
- location.href = "http://xp6.org/iframe.html";
1 l. w5 ]( ]+ } - top.location.href=self.location.href;
. h' |( t. l; h* W% R - }
) R; G; c* i, d: o* Z1 Y$ ]0 S+ r" y D - </script>
复制代码 ! V- c6 R; z' K. |; X- S9 f
将上面的代码复制到需要屏蔽页面<head>里面加载。- N1 |& q% `- x. i6 @. Q
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
, F3 d; M8 r* H3 T2 ]/ ?原理:# C. j8 u- I. O, ?( z# U3 B0 e
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
1 i4 O' @9 w* y( g: y第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。$ j/ W1 G% t8 m u3 A3 c- @0 s9 N2 W
目前测试这种方法没什么问题。8 Z9 m; j+ H4 Y3 b0 \1 t) _) q
, e& k2 Y! `7 ], K
|
|