|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
& Y/ f0 j( J0 w这次讲一下如何防止自己的网页被别人iframe。
: A8 g: \! z4 L+ A! h# T% a1 [, _+ L7 S# Q& S
1、这些方法都可行,但不是太可靠。
$ p. g4 X6 A# A! T% v8 B8 \- <script language="javascript">! a/ p. M& f @$ y) H& u0 a) L+ H
- if( top.location != self.location) top.location.href=self.location.href;7 z# B% C" I9 H' b
- </script>
复制代码 或6 W# C$ d! K, } J# E
- <script language="javascript">
& _+ c4 U' c- M8 `* x7 p3 w - if (top.location != location) top.location.href = location.href;
% L% W8 i( Q3 T8 C - </script>
复制代码 或
% ^9 l7 P p" e! I9 i' |4 q- <script language="javascript">) d; z6 e, a8 M: ~! k4 L
- if (top.location != self.location) {top.location=self.location;}# Y- | b' a/ ]3 C
- </script>
复制代码 或- b4 y2 ^3 K/ [4 z# N2 X& C, U7 I' D
- <script language="javascript">
7 S: E# {) W4 w4 m. i, v r: n - if (top.frames.length!=0) top.location=self.document.location;3 H$ m1 {9 e7 K+ c
- </script>
复制代码 不可靠的原因:: Z" l' N/ B) {! S
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。( a( c: `+ v0 H! c5 o: c' }
- <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' k# }, ~ ~- L
- <script language="javascript"> & z2 y' g' q5 Z, p1 H) m, p( ~
- var location="";
5 x5 g& L4 u% Z" {: e - var navigate="";" y+ \# D/ ^: Q% n' @/ [% H U
- frames[0].location.href="";) [) i% p2 I* V
- </script>
复制代码 或) i1 Y- T1 w, ^+ G
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或7 w7 N6 [9 o* k/ i" V& n- q0 w% |
9 y" i0 M3 D- ]- C& ?. l- <script type="text/javascript" charset="utf-8">; X8 Y1 Y/ O. H, O' x/ e) g
- 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>');% P8 ]% c3 t& L! I6 J
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。! Y5 w7 Q: X$ M" f$ [
Meta标签方法: O4 y$ d" p5 E/ J
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
5 D3 t9 s+ i4 _$ C3 C- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法& G; r1 ?$ f$ K% d6 z; @
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
6 P m8 A" X6 L U6 p' x3 e- add_header X-Frame-Options "SAMEORIGIN";
复制代码 - C2 ?5 H! M5 @" x' Z
.htaccess方法. u2 U4 ]/ o$ \* Q& C2 \# ]1 A# f
在网站根目录下的.htaccess文件中中加一句3 {4 X" ]7 [ i7 ?6 u5 p* t
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 , i' y. s7 U& l% s& L7 H3 x2 K) O( D
IIS方法) Y; K3 o/ ` Z7 T. B
在web.config文件中加- <system.webServer>
2 B: ^% r# N$ ?" S" }. [3 U - ...; z7 Z1 v, H$ X+ u
- <httpProtocol>. v) [$ \* x+ s$ H- B9 L2 ~
- <customHeaders>
& ]' n8 a- U0 U - <add name="X-Frame-Options" value="SAMEORIGIN" />
7 W0 q& E8 P2 _& X* ~ - </customHeaders>
. C1 F$ u+ q$ X( D$ h; N - </httpProtocol>
9 N4 r2 z% z) E* r* D7 _3 Y/ i - ...
6 C7 l# }2 e) m - </system.webServer>
复制代码 - a4 D% T7 m, B$ c& Z
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
; }% }: T' v! Z7 g+ ` s! H/ ]" e7 V' H& @3 r$ v
3、推荐解决方法。
: {' T/ k2 `" Y) ~, r- k$ I- <script language="javascript"> / i4 ^0 Z1 A, _1 T# d# P
- if(top != self){
7 A1 X4 y3 ?7 ~( I4 V0 ]3 A - location.href = "http://xp6.org/iframe.html"; , w9 r2 g/ j. G; {. s/ O
- top.location.href=self.location.href;7 U9 a# U1 P. [. f( d( }
- }
3 I- K) _/ f- y5 v: [ - </script>
复制代码
# Y# {" M; v# T& E, a! S* F0 `- K$ M将上面的代码复制到需要屏蔽页面<head>里面加载。
& ^+ z) O1 V0 w) c5 j制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
" R5 C* f' d: c& g; Q原理:
( t4 a3 Z- F3 ~% {9 n) |第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
- R' v$ H9 q8 h- T% v! ]* M7 Z第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
) V! e. Q2 \8 i$ k4 L9 ^/ m目前测试这种方法没什么问题。
U" E* |6 n6 C0 [3 a2 P$ y2 `1 ^% R6 v2 E% C w) W# C7 _
|
|