|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
( [2 {, B4 v' q. y! `( s这次讲一下如何防止自己的网页被别人iframe。
( O( ?5 V: z7 T" i( A1 C) R+ \4 Y0 e/ T$ u" W
1、这些方法都可行,但不是太可靠。+ N2 j" U& R: l; a' V
- <script language="javascript">" C2 @% Y v5 D3 N& k
- if( top.location != self.location) top.location.href=self.location.href;
% W" s# ^6 n: t* B0 R+ k - </script>
复制代码 或" x4 [; }- N% O4 c3 S7 L
- <script language="javascript">- J8 s* }+ ~# s
- if (top.location != location) top.location.href = location.href;
6 U9 h" @% x/ b7 E' `) _ - </script>
复制代码 或
1 E% F; y4 R, K* Z- <script language="javascript">4 |+ F( |: i0 O8 c0 K
- if (top.location != self.location) {top.location=self.location;}
/ A1 Y* {! ]. F0 [$ m4 U - </script>
复制代码 或
8 p& {) L! w( j; [- <script language="javascript">: C4 c, b1 n6 H6 H! j W3 G
- if (top.frames.length!=0) top.location=self.document.location;
2 v, ?% G6 u- A0 ~+ k% E& L - </script>
复制代码 不可靠的原因:* m3 }8 r- n. e% s/ p. i6 i! s
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。7 Z) s* F; B# U0 }2 O
- <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>' s7 v" P3 C6 K0 i2 F$ J
- <script language="javascript"> + t3 m: _& l+ R$ |
- var location="";
0 E% A9 \( @6 l# i% P) T- ^ - var navigate="";+ t1 ?; `. Y; ^+ h
- frames[0].location.href="";
( t/ @( \9 Q6 O) r5 t, O7 f% j - </script>
复制代码 或
# r- V6 ~6 o" N- x- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或9 g0 Z0 r7 H( q
( k' P* }" p# g1 Z' p/ j
- <script type="text/javascript" charset="utf-8">( `" u1 C J! X- y0 c+ O
- 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>');8 k4 }- V3 z0 q. o( t; U; A8 J9 e
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
, o* l" [% U; HMeta标签方法# V+ R9 ], h: i- a! m
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法% U/ _/ @% m0 f9 y1 [
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
, s9 i4 @5 a9 E5 E# x- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法: E$ [3 b9 F5 ~; l. A; N+ Z
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 & d G& M- ?9 r
.htaccess方法
z9 q. q0 p( C' L# z! L2 ^在网站根目录下的.htaccess文件中中加一句
9 P$ [! [; a4 w2 t, m- ~# n$ Z- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
9 W, u$ B, Q% P! WIIS方法; ~/ [. L) i/ T1 d: a m8 X: R
在web.config文件中加- <system.webServer>5 M- J. J) P Q5 j: E
- ...: v; r4 c0 E7 p3 `6 Z. W9 S* U
- <httpProtocol>
+ d, r& m) u8 a. s; @) w: C, s" p5 c - <customHeaders>
) h ~* x& H% `$ O5 s0 O - <add name="X-Frame-Options" value="SAMEORIGIN" />
( U$ s% t# O, f/ o4 p6 [ x+ @6 c - </customHeaders> * f/ G/ a1 p+ S0 X' I2 C' j
- </httpProtocol>
! A/ G2 T( b, l4 D( r - ...9 I( {* t' I- s5 H, ]2 o8 r5 C
- </system.webServer>
复制代码 / d' c' l8 V" A4 A( N
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。2 ], N/ O% k9 [
* h! n) H6 O7 h$ Q" M
3、推荐解决方法。/ M3 O3 ]1 B$ ?
- <script language="javascript"> ; X' Y% g9 u5 f1 l
- if(top != self){
* J+ e2 o% W# ?% _$ t - location.href = "http://xp6.org/iframe.html";
4 u3 U5 V/ v7 [; e! w* D, P' Y" d - top.location.href=self.location.href;
# P: g3 s8 _2 C% G: W3 l4 q - }
- r M9 B s5 A2 F* B9 F( j - </script>
复制代码
% c3 T I8 H C' k将上面的代码复制到需要屏蔽页面<head>里面加载。
1 P( l% }+ J5 ?1 ~( U+ ]$ m制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。5 ?( F* P: s5 l" p: a7 k: z
原理:
3 |* E! k0 L# F# r+ L# z# X第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。# g7 F$ k; N- p# K4 p) |- w
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
) a/ r4 a0 U9 J( s6 K4 U目前测试这种方法没什么问题。; @% f* M' ~8 P8 p _8 H$ @: E; C
& p5 O7 i' ~4 u; n |
|