|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。; D8 k, y0 X# a: t( ~% H
这次讲一下如何防止自己的网页被别人iframe。$ m# {0 v( Q( Q% ]+ N8 Z
+ v4 x/ Z" I" b& x0 I1、这些方法都可行,但不是太可靠。
& `* c0 z: L; w- <script language="javascript"> F# R8 G. z- z- l
- if( top.location != self.location) top.location.href=self.location.href;* R1 _% W, D+ O7 L# K% O6 k) U
- </script>
复制代码 或+ g8 v4 H3 ^8 R* J6 A9 E; e
- <script language="javascript">4 _! ]# Y% `0 r" c) ~2 e) J- L/ {
- if (top.location != location) top.location.href = location.href;
0 v: r* W% X( O - </script>
复制代码 或
' ]& @4 x1 e5 x. ~- <script language="javascript">
R$ O# c, n9 } G+ ^) T5 P( I - if (top.location != self.location) {top.location=self.location;}- \9 \; c% T* ~" n$ m
- </script>
复制代码 或! K4 K$ | Y! j) K; u" v( k2 y
- <script language="javascript">$ ^' D7 ~* V3 @- z
- if (top.frames.length!=0) top.location=self.document.location;9 J, a8 j9 v1 T$ L! c% x: t6 W& I6 w
- </script>
复制代码 不可靠的原因:
0 A6 [+ q1 B @2 N$ r当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。- x; z( G, k$ 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>3 ^8 f/ {$ c6 X% T0 j
- <script language="javascript"> # U4 R1 G( z; |# q Q& H
- var location="";/ M2 d) m9 h* O
- var navigate="";5 n6 S$ H, n+ m. Y+ {% Z( y# ?
- frames[0].location.href="";3 h' O9 M5 y) j' E) x
- </script>
复制代码 或7 C3 A2 s) R" t% v2 h! u4 x
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或$ w& ]' O. V. ~& |. c
3 a1 A8 J# W* G, C8 C- <script type="text/javascript" charset="utf-8">
; ~" d5 n& Z1 x1 Q5 B7 K: s/ x - 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>');- G& }) n3 N9 c0 k. }% {6 @% w6 c
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
" ]' P' h' _, uMeta标签方法
; B7 i: x$ @0 ?+ h- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法* C3 H1 ?4 y0 G, l, B8 |6 Q4 @& M2 d
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法# r( |' A: t# R+ A% O; r; {9 o; S2 Y
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法8 ~" M9 I8 f1 K& E1 [$ X& E
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 6 C+ c- F! O4 A) c) A+ T
.htaccess方法
" ?, k& y4 d& y0 d在网站根目录下的.htaccess文件中中加一句
p+ r; _ R$ f. k- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 6 b$ \2 @; |/ Z- h& e3 s. A7 k } @; Y
IIS方法2 q% b7 M5 H2 t1 z/ e
在web.config文件中加- <system.webServer>
1 U2 Y1 \; ~( a9 n. L$ W - ...2 N3 Q1 R3 p- _5 N, j2 ?! R
- <httpProtocol>
) c; I1 D# [5 F - <customHeaders>
3 a" O! h$ F6 w# l5 q& V% p - <add name="X-Frame-Options" value="SAMEORIGIN" /> ; a5 v% \8 f: @: V* R* |1 c- E
- </customHeaders> * {* C8 _- P/ K
- </httpProtocol>
! F0 F" ~1 Y, T2 A) E7 @ - ...
$ E; q; B0 }6 z K( g - </system.webServer>
复制代码
7 c8 _5 V+ c$ ]# }, [5 Y之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。! |# t4 {+ I% D. F7 E, ]8 p
& F4 w1 F8 K d0 V1 N# I3、推荐解决方法。
3 l: ?2 l) M) L! d- <script language="javascript">
# ]) ~3 E! ~+ A - if(top != self){: L, d3 B+ L k" S1 W
- location.href = "http://xp6.org/iframe.html";
; H* l4 M. [, P0 d* w - top.location.href=self.location.href;; b7 n5 R7 i% u6 G* F
- }
* h" K P3 R3 T4 T - </script>
复制代码
" S$ j" I% | j6 f y; l将上面的代码复制到需要屏蔽页面<head>里面加载。
9 `: [& K$ R4 l$ l制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。5 m w, y9 T0 {8 d6 [3 ~
原理:. t! i) _" Y# M" v) l! s) h
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。/ [" w: P! }# ^1 p/ M
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。) n7 r" k2 M% z5 L4 M" S" w0 t0 ?8 g- _
目前测试这种方法没什么问题。
! j& G5 x4 c: x+ ?4 E$ D0 h( }8 r w; |2 j" l, d
|
|