|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。" g8 ^- x" L2 F! f/ V
这次讲一下如何防止自己的网页被别人iframe。
' L6 |+ O1 j! V
$ f, Q, _) m1 ?3 k* g1、这些方法都可行,但不是太可靠。, Q% g9 b" W0 D' V
- <script language="javascript">5 Y4 t4 C0 R9 @+ o: }) J
- if( top.location != self.location) top.location.href=self.location.href;- F/ C) t2 i8 ~3 z* B
- </script>
复制代码 或$ |+ w& n8 N4 L) `. [
- <script language="javascript">
0 F& ~9 h- l) V+ S - if (top.location != location) top.location.href = location.href;
) l1 o! w1 R0 h, l - </script>
复制代码 或
2 y3 r# X, J# V, a; p9 @5 Y- <script language="javascript">/ w* ^! N& X/ L+ a/ d
- if (top.location != self.location) {top.location=self.location;}
% f3 ^4 o* I8 y( e" D; U) k - </script>
复制代码 或
- _* W. Q$ P' t1 D- <script language="javascript">1 L1 C0 `$ [. D; z, ~0 i) l: i7 O
- if (top.frames.length!=0) top.location=self.document.location;
! T: y9 E; J# O& ]8 r/ U4 t - </script>
复制代码 不可靠的原因:0 A6 \' w# S* M6 @) b: T% |
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
, z2 G8 E7 C J7 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>' r3 ^ Z; g0 |& h8 A
- <script language="javascript">
, W |; Y: v$ ?$ n/ n. I$ r2 s - var location="";
& f& C/ Y. R6 K6 E/ d - var navigate="";8 f+ d5 h( z( P' w5 q! x' v
- frames[0].location.href="";, U" G% q; V& Q! ^0 g
- </script>
复制代码 或
- U; B- ~, c1 r7 W" j% H+ V0 X- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
2 | ~; o$ I1 F4 D
$ ^, A% e. K$ _5 W& _/ A7 G0 }- <script type="text/javascript" charset="utf-8">; K' s' {7 Z4 U+ ?
- 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>');0 p: d8 [1 L7 a* j3 [2 r
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
. I% i% ^ p, S' g3 g8 p1 W, UMeta标签方法$ }2 e& m, F& W7 G, m
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
, H+ n5 ^4 w# e' ?# M+ O- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法 x+ M, `" ?# v- _: T
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法5 `' }$ h6 l1 _, |/ b3 {
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 $ v5 b3 i4 N, S; |. \3 Z. g+ _# n. |
.htaccess方法
: |4 G8 G' N7 c" y在网站根目录下的.htaccess文件中中加一句' \) n9 _) U4 t7 l. V5 P& v3 Y# M2 e
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ! U: b# w6 k4 G* Q
IIS方法" v* C2 D9 q% r( T
在web.config文件中加- <system.webServer>+ G' o3 I7 d) A4 p1 s/ R5 S* p* Y
- ...
' P# k& P8 F9 }( S, V8 Y - <httpProtocol>5 a, {) S9 Z6 g7 c2 w
- <customHeaders>; g. q0 ~' {4 p" r0 O& C+ n
- <add name="X-Frame-Options" value="SAMEORIGIN" /> $ h5 S9 T; u( T
- </customHeaders> e- _! v. c* i( }
- </httpProtocol>
+ `& a& }. w% Y% q6 D$ [) h. r - ...6 z( K$ N$ _3 c4 t9 W
- </system.webServer>
复制代码 $ T, z# b0 \- c1 N2 W
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。0 _) e! @ T2 L# d& l5 d1 g
! V$ E8 A- E9 `- v1 i6 B3、推荐解决方法。- w# i9 a+ c8 g% `4 e
- <script language="javascript">
/ v/ W# e e. o, B% \- z; O - if(top != self){
; Z( n/ D* r- _ - location.href = "http://xp6.org/iframe.html"; : d' F# K. H! X4 z
- top.location.href=self.location.href;
, ~' k9 h8 Z) e/ `7 o - } 1 B+ _5 {$ Z2 D: m
- </script>
复制代码
7 K w9 H( L) _. g将上面的代码复制到需要屏蔽页面<head>里面加载。
4 D2 ^0 K1 ?( ?0 `* c- {( I制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
% G$ N6 h8 P! T5 K( {: O- o; Z原理:$ Q( I9 K1 y2 D5 a: O
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。8 V- E! R* s" ~0 Y
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
# l+ ?% G/ X! L6 I- l目前测试这种方法没什么问题。& J2 u7 k$ j- s; @
; X+ G" i2 [; ~8 t6 k5 u# S+ W* S8 e1 H |
|