|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。* @ A( u ^2 W% g
这次讲一下如何防止自己的网页被别人iframe。
9 K3 {; g) d& W8 _, d; i5 Z
& F) o" o9 Y F6 X( G; M) z1、这些方法都可行,但不是太可靠。
7 [6 r) b6 e$ {5 L& z' T, n- <script language="javascript">
) S% L: F5 f% `( r# L1 P% f2 k2 k - if( top.location != self.location) top.location.href=self.location.href;* u; {( e" @$ _: c8 m7 v; T+ }
- </script>
复制代码 或
( ^" x; K" \3 M) n: ?! }- <script language="javascript">5 I( ] ~2 P; B; S: O! O
- if (top.location != location) top.location.href = location.href;& n) w8 G+ T$ n& c' H) Q
- </script>
复制代码 或
1 Q/ j; S" w9 l) J$ ^- X- <script language="javascript"> W8 W" {/ l s$ ~, h/ z4 ]0 R5 h6 {
- if (top.location != self.location) {top.location=self.location;}
* y8 t; c$ d) ] - </script>
复制代码 或
; z! J% V1 I1 z; w0 E. {- <script language="javascript">. \! o# S0 j; B0 f1 D# }$ M/ T' ^- ?
- if (top.frames.length!=0) top.location=self.document.location;: }! i. `- U1 t o5 d
- </script>
复制代码 不可靠的原因:
6 i( G1 g3 b4 J' K# p# |当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。& z0 {! G% I3 Y" b3 L* p! {& o3 U
- <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>' X$ i* e2 \+ Y4 q2 g( k
- <script language="javascript">
) z1 }0 s/ ]8 m4 e4 o# G1 I - var location="";0 X" |5 t9 Z+ G
- var navigate="";0 @- l8 D9 Z. H9 A4 g/ w$ N" Z# [
- frames[0].location.href="";
) r. P" X; q; V" p( h+ h1 t - </script>
复制代码 或, e2 G1 v' [7 y% z
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
3 A4 F6 ^$ ~2 u7 [6 G/ c! n
7 {8 C$ c; Z x9 X- <script type="text/javascript" charset="utf-8">
. N7 Q' l6 E" S, A& 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>'); k! ~3 E* j; Q8 G M9 x
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。7 ?! ?) m5 X/ P- l
Meta标签方法# S+ I2 B) _1 ~& \) _6 G( f
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
) e# f. Y) I! P" w& C7 i- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
7 b6 s9 c8 D. A' J9 H4 ^2 `( q" Q6 h' q- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法" n7 y1 S' `" W0 d# t
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ! A2 E+ y$ r2 b. R) R
.htaccess方法8 A9 E5 j( Q3 Z
在网站根目录下的.htaccess文件中中加一句
+ K8 D( a% O F# p. B' C/ Q5 B" c- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
2 s; F2 |: E; }/ a& E6 iIIS方法
$ L: n8 K( w+ i/ M3 e6 O在web.config文件中加- <system.webServer>6 B, e% z+ d3 b8 P8 U
- ...
( d* C9 x0 ~1 i( Y6 |7 N - <httpProtocol>; j- ~* O2 q1 m9 W) ?) q
- <customHeaders>; ^) z; n. w' D7 V
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 7 E) X# y! Q* z
- </customHeaders> - M) d4 e! t5 O& a: \# B
- </httpProtocol> 9 N' p* {7 R% I' }
- ... M5 K6 o! a. H9 S
- </system.webServer>
复制代码
( V9 V2 q& _# y6 k2 Y/ r之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
2 \6 u# s3 T, f/ ^; M, B& h
. L! [2 e% Y6 D; ^+ j. r2 E& i3、推荐解决方法。* S9 b, N+ v3 Z
- <script language="javascript"> & R* L7 j( Z4 z$ |) v: F! r
- if(top != self){
6 T2 I* r, Q8 C& m- q - location.href = "http://xp6.org/iframe.html"; 6 Y2 r7 ^ i3 Q9 e+ X
- top.location.href=self.location.href;" s' G# K* A8 U1 T: u% Y
- }
, r4 w- U% B a0 H: a; X: f - </script>
复制代码
5 i1 C" a; r8 Z, r J6 X将上面的代码复制到需要屏蔽页面<head>里面加载。$ J- l. J6 Z( k' `/ ^) j0 m
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。1 W7 J) K, q* V2 X
原理:0 E9 O& s( z6 j& M4 O1 c6 v
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# X1 D* |; j# F0 y. c/ x7 z+ |第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。7 V( {8 a4 R, `9 D
目前测试这种方法没什么问题。* E9 W2 {% e% S5 x0 S2 N( k
$ r% z1 T6 p5 ]" C9 ^) _" g8 {
|
|