|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。) G1 c8 p7 k. I5 Q* t( u. g6 W
这次讲一下如何防止自己的网页被别人iframe。7 b5 l+ R8 H& |7 m4 {) ]
6 Z' N# J8 c; P5 G/ o- c
1、这些方法都可行,但不是太可靠。: H3 k5 c# L+ h& J, \
- <script language="javascript">) f K6 G6 v( Z, ^
- if( top.location != self.location) top.location.href=self.location.href;
% x3 Y9 z) C0 j* } - </script>
复制代码 或3 Q" R$ H% a3 K, b$ e* N
- <script language="javascript">$ k+ I3 y! t" q$ \
- if (top.location != location) top.location.href = location.href;) B9 ]7 }2 v& v6 N! x
- </script>
复制代码 或
- k5 z% M. ?3 w& o5 d- <script language="javascript">& y6 V' b9 R$ R
- if (top.location != self.location) {top.location=self.location;}
7 \/ L/ z, f" T& ~+ v - </script>
复制代码 或8 g8 w0 P* B& k w# Z5 v P5 f
- <script language="javascript">+ P; [) h& i) L) V6 ^6 p
- if (top.frames.length!=0) top.location=self.document.location;
) J! E8 |! Z6 F7 A - </script>
复制代码 不可靠的原因:& H7 H3 B. k3 v2 v5 D7 h
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。: O3 I( c0 C2 q, V% Q: j9 h
- <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>
) c* [8 U0 Q, _% X2 }. F' ]7 q/ ] - <script language="javascript"> $ v6 R! X7 z ]* N+ e
- var location="";
, _; I) d y: X" m/ J! O. R- a - var navigate="";
# J' L5 x5 E- F9 B8 l4 ?$ t; E - frames[0].location.href="";4 f: J4 H1 H( A6 z+ n2 Q
- </script>
复制代码 或- G; _7 [- g5 K
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或) G$ Y4 D _1 r; u" k" `
9 p) E" @. I+ F2 k$ E) a- <script type="text/javascript" charset="utf-8">" K3 x! ~2 c; Y1 |. ], l5 a
- 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>');1 C" q8 Q8 R2 X
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。% o0 E. T' Q3 E! Z8 `8 g: ?
Meta标签方法1 k+ s4 q, q4 R+ S5 b
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法) o) w. F- z) G6 e+ {* o8 C
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法6 r2 b5 Y* p- l g" z. v
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
( h* Q8 `: f! Q' N; ?- add_header X-Frame-Options "SAMEORIGIN";
复制代码
- G- V5 B) ^4 U+ w5 P4 a.htaccess方法( @/ J; j" M$ e6 G, i
在网站根目录下的.htaccess文件中中加一句# T, p. l" j: x' ~+ i
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ! a' M- n$ g3 ]. ~
IIS方法0 R6 M1 @6 e8 z5 k' q
在web.config文件中加- <system.webServer>/ R: D2 f1 k+ m" H$ `
- ...0 q1 J0 `6 \1 N T% w
- <httpProtocol>
& U5 u E& E: q7 Q+ J( i/ f - <customHeaders>
( s% q& Z) \* ~) \+ v5 c+ l - <add name="X-Frame-Options" value="SAMEORIGIN" />
# b* I$ F. [6 n* \: Z - </customHeaders> 9 S! a3 I9 N( I% W
- </httpProtocol>
" ^4 q; w. U4 `" j0 F* ]+ v+ F - ...
; j7 ~1 B1 }7 W5 `* Z1 I8 V - </system.webServer>
复制代码
, w% n" P U: S6 z5 a q* M! F之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
% w; a5 w, p+ y0 H8 G& D/ \3 n, R$ V5 V; ?1 f$ u* d
3、推荐解决方法。! T4 l( x4 _$ ^7 s6 f! D i2 v. p" U
- <script language="javascript">
/ f' k( v# ^! [) | O P' |9 b - if(top != self){1 @7 x7 S/ r. x3 b6 H( \6 y
- location.href = "http://xp6.org/iframe.html"; 8 ?' ~5 K. {9 p" m
- top.location.href=self.location.href;- i" c# Y0 v3 w" F/ c
- } . |+ v' M, o. C
- </script>
复制代码 * M" p+ B _9 p- m
将上面的代码复制到需要屏蔽页面<head>里面加载。 N( ?9 c' h! u1 w/ ~$ s6 ~7 y6 j5 Z6 x, t
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
' c# o. [; _1 R0 w" M$ E原理:- R3 ^ R: q* [. v
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
* l4 Z1 Q4 f5 S1 f3 |' [第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。+ I5 n! I4 O$ Q4 o s& [9 M
目前测试这种方法没什么问题。4 D. |" b7 ^# e3 p/ M0 Q
8 z- A* e3 I( c7 v
|
|