|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。 C+ g. h# @, k4 m' d! {6 D
这次讲一下如何防止自己的网页被别人iframe。
4 R0 |4 K5 |6 K/ \+ \+ @9 L! E
1、这些方法都可行,但不是太可靠。' P) M5 p0 R1 l }; E5 F9 G
- <script language="javascript">
( u2 p" k# n5 ]/ F+ k2 Y# e - if( top.location != self.location) top.location.href=self.location.href;
0 H4 Q8 Y- z3 O# N& M4 _ - </script>
复制代码 或) e, A! y( i0 E3 K
- <script language="javascript">2 F: j2 E4 Y1 Q
- if (top.location != location) top.location.href = location.href;
3 d4 i) c, m b5 |% [ - </script>
复制代码 或
) Q) m+ y% x' l6 a5 n! d7 Z- }% j' y- <script language="javascript">
8 X' M1 T7 T- E# i F( W - if (top.location != self.location) {top.location=self.location;}7 \$ H0 a( }6 f/ R9 X' o( [4 g" Y
- </script>
复制代码 或0 U- z/ O7 Y" _0 R4 t9 j2 |
- <script language="javascript">
# u, c1 ?/ d9 s6 E5 p: s1 J, o - if (top.frames.length!=0) top.location=self.document.location;3 b# l# Z* T# q# o
- </script>
复制代码 不可靠的原因:7 V! h! B, y) @# ^- q9 u6 i4 i
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
" y* u4 K% \1 o) {0 g# d: w- <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>
/ g& q3 F8 r: ]2 z - <script language="javascript"> - u( m) p1 p+ U/ `6 d+ G2 \1 R2 q- m
- var location="";
( d; g/ @; c; V - var navigate="";/ N+ R5 L. v, ~4 X. [
- frames[0].location.href="";
* G. n, i; D, d$ }$ T+ `* M - </script>
复制代码 或
6 Y! Z, ?1 ^9 a0 @- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或" M, n; }% x& X, a& U
. P) Y* r- z: ~ p6 M+ }- <script type="text/javascript" charset="utf-8">
' M4 n7 H; P9 K" H( L) Y - 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>');! B0 l- {7 K! d1 ]& H0 c
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。/ J0 ~! E; A( S' g- V9 R+ H2 D S
Meta标签方法. Y: u7 }) l/ z9 H
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法9 Z8 M! z G5 e
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
# K5 q/ Y' L6 L% K- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法; Q: b) ?8 D0 G. B& r
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
1 Z- _8 y6 ^' C( Y9 w2 S& |9 z% A.htaccess方法
# q( o- ~+ w2 F% ^& |在网站根目录下的.htaccess文件中中加一句, g$ O. u- O, A- S; |* L
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
$ \1 D( A$ w O$ V( KIIS方法/ y: E+ x5 `3 x' s8 ]4 e% \0 }1 D
在web.config文件中加- <system.webServer>
: H( l7 U j. w/ J# `1 {5 x! w1 I+ K - ..., L* G+ `9 \7 g7 P
- <httpProtocol>
9 _: s' v m7 H( e! A; b - <customHeaders>
% Y4 W: x7 J2 h. g; W, L" J, u. ^ - <add name="X-Frame-Options" value="SAMEORIGIN" />
, i" {, ^+ w4 w+ N/ E5 Y - </customHeaders> 4 f' P7 R2 ^! |' _; Z* _
- </httpProtocol> " D3 L" y w: P6 R9 _' `
- ...
7 _& O* M2 u0 _6 k* f - </system.webServer>
复制代码 : _) X, p0 {5 R0 W$ J
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。# _) y& m/ G' m, b
8 l' u) h k+ v6 j3、推荐解决方法。
# E9 G# l# Y& {; x5 R7 ~; m {- <script language="javascript"> ) ^8 [$ U6 i5 n' s ?
- if(top != self){
% T$ O& h# ?$ @4 Z, N - location.href = "http://xp6.org/iframe.html"; % s8 B4 C. n; b
- top.location.href=self.location.href;
4 k5 m3 A$ n2 x) h7 I0 n, m& j - }
8 x. g+ x4 E- p( l4 C$ X% e" T - </script>
复制代码 ; d( X5 u( g6 @# L3 i7 B% N
将上面的代码复制到需要屏蔽页面<head>里面加载。# \- V# e3 K4 B4 k& W: E" l
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
U5 u$ M4 h6 A; T原理:
5 A/ G I5 v$ n0 Z- I第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
( q V. |9 J; ]3 R第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。- O" `1 K( _$ D) {5 T' o, h4 T! | U4 d
目前测试这种方法没什么问题。
$ ?7 Q0 Z- T. L v1 Y5 m8 e% e8 c: v% F( b& p, X6 i1 _) v+ F
|
|