|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
* f3 d8 e0 @/ V# G/ F' q这次讲一下如何防止自己的网页被别人iframe。
' K9 r8 `1 H5 _9 d; H
) i( J' k9 r; d4 p, j1、这些方法都可行,但不是太可靠。' r6 X7 i. ?$ I' J
- <script language="javascript">9 v; K! b1 W- ^- [; @
- if( top.location != self.location) top.location.href=self.location.href;& N }7 f+ E |' M
- </script>
复制代码 或) J) k+ H! G* S1 I! w. V G2 T# }
- <script language="javascript">
* o% q1 x$ ]: R; |& f - if (top.location != location) top.location.href = location.href;$ t0 V# ], E# V
- </script>
复制代码 或
: v( P0 H. r$ U: u; t- <script language="javascript">8 R3 g* S4 I) P/ C
- if (top.location != self.location) {top.location=self.location;}
* }7 X9 j5 O. V# ]. j1 D) @ - </script>
复制代码 或
$ x2 r8 n: O; \. H4 E# |0 P+ U- <script language="javascript">
5 Z- O: D' y% a9 L7 @ - if (top.frames.length!=0) top.location=self.document.location;
; i( r9 ^2 w0 w# A - </script>
复制代码 不可靠的原因:
% M! o/ B9 D) C+ c8 k! n) W当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。( A: n: }6 R* o1 ]) F5 Z
- <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>
# n( r. z: j2 P - <script language="javascript"> p" q, @* C6 P% W2 Q1 u7 ]
- var location="";) H' x7 z7 O$ x7 N( z5 Q
- var navigate="";
$ J% B' @! J) t5 s b - frames[0].location.href="";
) q$ { A# Z8 B7 d4 d# D$ j1 R - </script>
复制代码 或
' l9 k% B' N3 p/ q- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
1 P* r, Q# d" c! S6 `( B6 \3 U0 _7 N7 E6 I; s- o% f2 y, ]; {
- <script type="text/javascript" charset="utf-8">
& x' @1 o! y! c# @& A* f - 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>');
; Y4 R; P9 |! ~' @4 e; J - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
F0 u5 @' j. f+ l! \Meta标签方法
# U9 J6 d: {8 d- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
7 ^ X+ k( x& o- a- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法7 N+ e' P" w7 [. a
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
6 @; \/ J8 J# v5 T' `+ O- add_header X-Frame-Options "SAMEORIGIN";
复制代码 7 V5 ^9 K# |5 r* e( P' t
.htaccess方法9 p& O8 T5 C# V
在网站根目录下的.htaccess文件中中加一句
8 y- N* C) g* Q- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
+ E2 l0 Q" I* g9 x+ x |- ]IIS方法8 q6 _8 N& F2 ?2 G" W' m& F4 ?4 W# S( E
在web.config文件中加- <system.webServer>
' x) d* F: H% U1 F1 | - ...
1 j7 O6 ?+ C* R9 C - <httpProtocol>
% h) r% \4 x0 y6 J - <customHeaders>- o5 G* }" T. c& e. i8 B: G9 D. U/ w, m
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 0 g& M9 m/ u- K
- </customHeaders>
# m- `! A6 A: J0 C$ B/ c: u/ u - </httpProtocol> / x: w' r1 O" k5 | i, L
- ...
1 _0 g3 d0 g: { - </system.webServer>
复制代码
! d: X W3 S/ [# E- x! B之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。9 B, i5 w, o8 F" |2 J# l5 F
. `" ^7 ?+ q" c: m5 _+ K* a3、推荐解决方法。4 b2 T( }9 x% l1 i
- <script language="javascript">
$ a* s9 \' @$ R2 D$ {' G2 V - if(top != self){) l: N+ b- h. r" k4 U/ Z
- location.href = "http://xp6.org/iframe.html";
, e K2 r5 |7 G% b, I$ x. ^4 y. z - top.location.href=self.location.href;
" g* p' H; a" Y: S8 d* m' K8 n9 k0 \! B - }
: m a# |; X2 |& F3 `9 h5 ?+ E - </script>
复制代码 ; h8 K2 o& `/ Y3 D0 m6 R" P. R
将上面的代码复制到需要屏蔽页面<head>里面加载。
+ a5 _/ R# c4 Z( e9 z制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。/ E" Q$ \2 H2 h. t* _
原理:
* g/ V3 O! J( a0 _4 y第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# B# D( b1 d4 ^/ [% U" {9 i/ W第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
' Z( k: ^5 E8 ]目前测试这种方法没什么问题。
( K/ B* v0 W8 m( j( N" A- {8 ^
, c0 F7 G: A, L8 ~3 l |
|