|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
! f4 C3 j. y4 s9 v3 |( _9 o这次讲一下如何防止自己的网页被别人iframe。9 h1 u' Z8 U( q+ R4 ?
0 u3 R! N# ~6 N% E' g3 h, ?6 Y. h+ N1、这些方法都可行,但不是太可靠。
7 z1 b- O$ J6 K: a- <script language="javascript">
]! T- E; x# u+ o; L$ o' p - if( top.location != self.location) top.location.href=self.location.href;
6 _) @3 a$ j# h9 H. | - </script>
复制代码 或
: f2 A2 \: o, w5 H/ O- <script language="javascript">% V3 M& n5 v( ~- m3 m0 b
- if (top.location != location) top.location.href = location.href;2 @7 p5 K2 \8 u2 Q. V* r
- </script>
复制代码 或
5 E% L, U" e) U9 @) c) H+ S- <script language="javascript"># _3 F, ]1 {. T
- if (top.location != self.location) {top.location=self.location;}
v' W( o, D- q$ `3 L3 _& `5 v - </script>
复制代码 或4 {* @3 F( H2 k [+ [3 ~) f4 h
- <script language="javascript">
+ W) M3 z: c3 V+ `2 j - if (top.frames.length!=0) top.location=self.document.location;# q- o) F7 S( D2 T: j5 }# ^
- </script>
复制代码 不可靠的原因:8 L$ m, S' j: ^; s
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
1 H+ C6 S$ M' n' D% ]- <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>" b: X$ K; @7 N& m! O* D1 I
- <script language="javascript">
* \& l" C& N0 F( s) U9 ]& O - var location="";
( M, j2 Y Y; t0 I - var navigate="";
$ h) T* o% ?% M! l4 k) ? q - frames[0].location.href="";
# C2 S( r" _( d3 j - </script>
复制代码 或
4 N3 R8 z) R- A: C" p- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
: X; X- z8 F+ v' q* d% q
! y" w5 {7 v( r- <script type="text/javascript" charset="utf-8">* U# k. d* v1 D( Z# a: R
- 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>');: c2 ^! f5 d, U( k4 `4 Z* n- b
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
7 L5 W; M4 p) m$ AMeta标签方法4 ]) W6 \8 X! l! X( b* a# w; D$ J+ }
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
5 ^3 t- H, L$ ^ @" x& |# u- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
& ?# _( T ?0 e3 x- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法. e4 f: B o, ]1 K; S
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 # D/ Y. F. q8 k/ d! m' u) w4 R; z
.htaccess方法
9 q4 v4 R# k5 E: M, z( Z J在网站根目录下的.htaccess文件中中加一句! G9 z6 {9 |6 f+ P- Y6 e$ ?5 d S
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 , M) k9 i7 q; {
IIS方法
: f6 I2 O3 |$ _# {8 T& [- Q5 p3 M X在web.config文件中加- <system.webServer>
" T3 c( X$ o7 m$ q: h* s5 }! p - ...9 C9 m, ^* ^5 I) N
- <httpProtocol>4 { Q. U% z e; f
- <customHeaders># D, G9 G, y6 g# f: C. W* I3 N; F1 \
- <add name="X-Frame-Options" value="SAMEORIGIN" /> ; T! G5 U% L* h: _ c0 ?
- </customHeaders>
5 W" N, O8 |* Q& s e# B B; l - </httpProtocol>
& A H3 T% v5 d- L+ Y! V- a( L - ...8 P6 `# k6 J% Y C; l7 U# ~
- </system.webServer>
复制代码
) i2 y5 w0 |" `! J! x9 @! z5 M( b之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。0 ^% g1 F" G) n" d, ?: `* W0 r
8 x5 y/ h5 d! g g r, D
3、推荐解决方法。
) M% S8 l) ^6 m9 d& j: H! a4 e- <script language="javascript"> & e" A' I% j2 W5 d) r, L
- if(top != self){1 m- t! F; f$ F5 {
- location.href = "http://xp6.org/iframe.html"; ) ^2 ^' x. u( d( t% M/ f( A7 a
- top.location.href=self.location.href;
+ C: @8 c! |& z7 ]. T* u/ C - }
: R8 R7 ~2 W( W1 O6 y - </script>
复制代码
% L5 p9 @% c5 x7 N- \6 K7 k将上面的代码复制到需要屏蔽页面<head>里面加载。% z( l/ M: U `2 T7 j& o+ j
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
. q) o* p5 H8 y# U5 L: H原理:/ b; B' u: ]. |0 m6 \5 W L
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
6 e5 ?6 [! B8 O" y7 y( f P# l第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
+ B$ m# l# p* f$ W, H" a; g目前测试这种方法没什么问题。
& ~% K& ]! I( C* S% u, M* p7 J) F3 j7 ~% }, w
|
|