|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。- c) I' g0 Z! Y" z' \7 D* d; y
这次讲一下如何防止自己的网页被别人iframe。: a: h) q3 V# E5 ^6 o
* H+ L4 v. b* A; ^6 H1、这些方法都可行,但不是太可靠。
7 z1 B6 ~# e- ~& V) E- <script language="javascript">
% q5 p1 w2 d: j - if( top.location != self.location) top.location.href=self.location.href;
! z3 h8 f) d2 @0 x: Y1 ~$ A: W" x - </script>
复制代码 或* ^: n+ Y0 q4 ]. U# f6 a
- <script language="javascript">% x7 B6 y& @0 y$ E
- if (top.location != location) top.location.href = location.href;$ J) X. k; J) X$ l! h* A+ I
- </script>
复制代码 或
; s4 X% x, ^: v7 y- <script language="javascript">1 k8 ~6 e$ P \+ y2 V
- if (top.location != self.location) {top.location=self.location;}9 z3 E* V3 Z& [9 p @
- </script>
复制代码 或: s8 p% y: `9 q. M
- <script language="javascript">
* W+ i- j4 c+ c) g9 p, I$ i2 p - if (top.frames.length!=0) top.location=self.document.location; i3 J6 }, D) f+ |# _$ R. T' E
- </script>
复制代码 不可靠的原因:
: S1 s. E E2 ~0 i当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。" h1 D0 H4 d ?4 M
- <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>$ A$ E8 x/ q0 X0 a1 _
- <script language="javascript">
/ E; p! z/ E+ n N5 l - var location="";# k# u: l' O& b9 O+ e2 J
- var navigate="";
4 E7 R" E8 b* f9 K l; h - frames[0].location.href="";, ?9 S0 [9 k6 R4 u3 J( E3 Q- B* H, l
- </script>
复制代码 或* y9 M& `1 W3 x/ _2 ?" @6 Q+ \
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或, h. a4 P/ {* P) V3 i; p9 O
9 f, y6 p) I+ I
- <script type="text/javascript" charset="utf-8">
/ C* t: H" _$ n - 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>');
) Z6 Y! B# m/ ~4 q* C' ^+ [ - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
) L1 C( b& I9 k, n" e3 S0 eMeta标签方法
/ F M) h1 Z: y- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法$ j9 ~* A8 ~# p: M2 u( A1 Y
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法3 Y3 d% M+ L; g- z7 C' P( {
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法& d7 X% t- g2 b" z) h
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 : ?% A e; Q1 h) b
.htaccess方法. c+ N' U; n% @
在网站根目录下的.htaccess文件中中加一句
/ s2 n4 g( @7 l/ s. q1 s) Y- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 % [) i2 ?5 `; @0 d& X
IIS方法3 }: m+ B# N6 _; I
在web.config文件中加- <system.webServer>
# I) X# p/ ^" Y - ...
5 n, I5 M( U V6 |1 j; p7 K - <httpProtocol>
7 N1 f- W/ F8 l- a. O( D - <customHeaders>
2 g# p$ P6 t0 a6 W: P* x% P5 X5 f - <add name="X-Frame-Options" value="SAMEORIGIN" />
m& P! ~; I! h k2 f2 f - </customHeaders> / Y) r! l! e3 y( d3 m/ N) F$ s
- </httpProtocol>
" ?" [& `+ V2 z p. I- Z - ...; V& J3 X' v0 a# `2 N$ m" R
- </system.webServer>
复制代码
8 C& ^3 _$ C0 Q& S之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。/ r: G- L5 ?% [+ \! M k
7 s* n T* \/ Y) F; G* w" i
3、推荐解决方法。# k" y& p- q: }$ _+ m
- <script language="javascript"> : K- ^; C* |& x/ K( F
- if(top != self){5 o( n8 T# C- y; Z
- location.href = "http://xp6.org/iframe.html"; " g2 l0 G' u1 s
- top.location.href=self.location.href;
Y0 K% S! w4 q8 G - }
) J! Q, V; t8 `" f4 ^ - </script>
复制代码
* S! i" l) M& F1 K将上面的代码复制到需要屏蔽页面<head>里面加载。
- Z" ]3 h ?. c! Y! y2 E制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。0 }. C( j5 n: }% C2 ^
原理:, f1 I6 ]' x2 G, h; j
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
& P& C% { P) u第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。7 q5 J6 Y5 l1 F
目前测试这种方法没什么问题。, O; J" C {! w) s
) ~5 t9 P' w% H; m9 J
|
|