|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。' K, S& B3 f7 n8 B/ i0 T) A
这次讲一下如何防止自己的网页被别人iframe。
3 b& p6 W3 x; U% J E6 O# V
9 `" G0 L9 K4 K+ b1 A1、这些方法都可行,但不是太可靠。: V: r( e3 A; |& D" U/ [) Q
- <script language="javascript">
7 f/ {# l7 f& m, P - if( top.location != self.location) top.location.href=self.location.href;8 [' k. O5 w; B8 `+ R
- </script>
复制代码 或1 ^/ x) Z* e1 N6 R7 Y' S0 E- ]
- <script language="javascript">
8 }7 H4 i9 P0 C. u5 t) G - if (top.location != location) top.location.href = location.href;
. d' I& Q" a: W. G0 ]1 s- l - </script>
复制代码 或, `) \- d2 ^# y; W( r
- <script language="javascript">
) [; v6 O+ B( z/ z - if (top.location != self.location) {top.location=self.location;}1 U) X& S t6 D
- </script>
复制代码 或
8 A; y! t4 P3 U- <script language="javascript">
. V* x* h& U5 f. P& U( { - if (top.frames.length!=0) top.location=self.document.location;# b, Z8 I h5 f' Q6 O* H
- </script>
复制代码 不可靠的原因:
! Q) y& k0 ^ d1 g: e7 ?) }当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。# n8 p! z1 P3 |2 l Y8 p% o0 \" 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>
& y% T, h5 ?& G w - <script language="javascript"> + G( }- H$ S; ^
- var location="";7 P% i9 C6 }: O5 `( S/ f X, u3 S- z/ T
- var navigate="";
( Z) Y: ?' K- E/ S8 q0 q2 a9 G - frames[0].location.href="";. d, y2 o4 d4 L8 U4 ~( _
- </script>
复制代码 或+ }# J6 E, ?+ \
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
1 ^" }- Q. }4 i9 S8 R% B: K+ r
6 ]) f; ~( B. L/ s- <script type="text/javascript" charset="utf-8">
0 {+ I, r7 D. _ f1 f, i# q - 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>');
3 `! f7 i' Z0 R ~! N - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。" S$ e0 i; r9 O( K3 x" U, A
Meta标签方法9 m& a. z. T a' R; z
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
- n* Y2 }; ]" D/ j( X7 y0 i3 q8 d+ y- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法+ T) D3 N& R" x2 A
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
/ Z& x9 y+ b D* A( ]0 y- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ( @& t" M1 F3 t" d2 e6 k
.htaccess方法
. A! |7 c0 M. q. }5 e3 S在网站根目录下的.htaccess文件中中加一句
( X) \' N e+ ? D, G' F- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
* H @& \7 J$ d2 z" q8 qIIS方法, G) E1 H. o# I
在web.config文件中加- <system.webServer>; ~$ d2 V5 `- ]: U+ q# e' s
- .../ e9 _0 G/ N* l# i* W+ A) `
- <httpProtocol>
0 n, w2 O( S5 ?" @6 }/ A - <customHeaders>9 A' I2 z3 W! t' w! s# o, N
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 0 P: {6 S; `* l; V7 Q4 C
- </customHeaders> 5 {: b; H% b" y8 Y) X% O# f
- </httpProtocol> 2 h! j4 G; b- n2 {( f- V
- ...
], ~' o l+ W6 P& g; n) n! i - </system.webServer>
复制代码 $ W H# m$ G1 ]
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
3 j% P6 k5 y' o( p. _; }9 `) _, o2 h. _: d2 E3 }! v% X8 v- N% Q
3、推荐解决方法。* N: ]) C# n' W! P( x s
- <script language="javascript">
- r: D8 c {9 Q, g6 M# l - if(top != self){. D( m( s3 z6 t- T& ^3 L/ q% a3 H
- location.href = "http://xp6.org/iframe.html";
# x+ _6 v& E3 W- j) a" Y - top.location.href=self.location.href;; Y" x- ?" q% Q f$ V
- }
) D! K8 W$ j0 m( u" G' d* } - </script>
复制代码 ( H& V, Y' j5 S# H
将上面的代码复制到需要屏蔽页面<head>里面加载。
4 Q% E5 o+ l" ?+ H) ^( d! H1 n- x制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。% u/ \1 d9 F* l% p s# L
原理:8 K6 f& I# [5 r5 Q. d/ e: _, B
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
- j8 y1 d+ [" @8 n8 H6 k- z第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。# s8 Y1 l1 G' v
目前测试这种方法没什么问题。/ c9 _' n+ B9 E
9 d/ ]# W3 u) v |
|