|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
2 {0 u9 z' @* ~. Y这次讲一下如何防止自己的网页被别人iframe。; ]1 U3 ], L: _" ~! }$ z2 z
7 c+ \( H' F- ]' z1 s' G, l W& B
1、这些方法都可行,但不是太可靠。
r4 F5 x, W- a8 t* C, n d6 U- <script language="javascript">9 J# e' n: u- a! }/ t. P( o5 v% u
- if( top.location != self.location) top.location.href=self.location.href;- h: E6 }) F9 [1 V
- </script>
复制代码 或
5 O9 k* h* ^- F- <script language="javascript">
: [. g3 d( `8 w/ m8 I8 W* P. u - if (top.location != location) top.location.href = location.href;3 |3 H }* X/ c) ^- O
- </script>
复制代码 或! Z: l2 ?) s+ [: |" Z7 ?# G# H. a
- <script language="javascript">) t# @8 w/ |* P
- if (top.location != self.location) {top.location=self.location;}
3 A. Q. Q5 G$ d) l. C - </script>
复制代码 或) v. ~3 \$ e$ r- N
- <script language="javascript">
) T) H. B( o O8 X+ D, _% l7 H - if (top.frames.length!=0) top.location=self.document.location;4 Q' e4 Z2 R, D5 W0 u
- </script>
复制代码 不可靠的原因:4 P* ^; ~6 _, @$ Q( ? G J
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
, K I$ [7 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>3 Z8 n+ K T B6 |) ?* Z
- <script language="javascript"> 0 U% w7 d8 b i" M/ k; b) g
- var location="";1 m: S$ S- T) b1 G% c6 {
- var navigate="";1 ]' X3 g& o1 ^9 e; |# K* M
- frames[0].location.href="";
( w! b6 K$ ? Z) G - </script>
复制代码 或* _8 J, d) S5 q5 B: m% ]
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或2 @8 I) S/ D+ w" U% l& ]9 d
; C; `: U F. Q
- <script type="text/javascript" charset="utf-8">! Z# w( q3 e0 Q4 C! H; M& P
- 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>');7 _; k0 z5 N6 K% [4 l
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。2 Y" N, A( ~! k0 e
Meta标签方法
6 d% h4 A% @7 u. C, w- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法0 w w, s1 @% t( r7 ^5 i
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法6 `2 H, l m8 U5 G* q
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
3 k* P6 t& S0 I0 b$ l' M- add_header X-Frame-Options "SAMEORIGIN";
复制代码 / S6 d' u# M; Y5 S- _" i# x0 |
.htaccess方法
/ ~, q8 ?/ D1 I在网站根目录下的.htaccess文件中中加一句: N* c+ E% P/ L. I4 y
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
/ t1 j0 X% H' X2 f/ S6 UIIS方法
, T# t' F" [( W" f% Q在web.config文件中加- <system.webServer>: p4 j' J9 |7 x( Y* D0 y/ w5 d
- ...: m; m$ v; n3 K3 |( j' j" ~
- <httpProtocol>! U- j- g1 ~0 X
- <customHeaders>
: [* P* _: f) T) c - <add name="X-Frame-Options" value="SAMEORIGIN" /> $ w3 o1 z7 J) w6 |9 q
- </customHeaders> " ~. w7 B+ `5 a, r5 y
- </httpProtocol> % a/ I. o: Z4 a. \( A+ b9 B
- ...2 Q+ L4 v/ {0 a$ J) n4 n T" G+ @
- </system.webServer>
复制代码
9 |8 z K# g# D$ f$ t* d之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
- l6 }4 \. J8 F, e4 g
5 D2 @% n5 Z }2 R3、推荐解决方法。
" e6 |" S+ c. y, E2 Q- <script language="javascript">
6 {/ i1 A N0 [7 c' u; }! Y/ b. m - if(top != self){
* u9 s/ L( d( c8 t. x- {. [ - location.href = "http://xp6.org/iframe.html";
1 {7 j5 P0 }; A' h+ {3 F - top.location.href=self.location.href;
& l+ f% o8 x: K% {" l9 A& D9 x - } # ^5 P. J. @7 \4 d' e
- </script>
复制代码
3 ] ^. I' \: s a- {2 O) ]; k将上面的代码复制到需要屏蔽页面<head>里面加载。9 K% W8 E Z0 C! _; i4 t
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
. i4 i9 o' t' y* i$ G" O1 Z# j) O原理:
: k2 K# \8 u1 R U, n( k第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# K& J6 I P) ~3 |( e6 T" n( j1 m7 `第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
8 q" A9 g; E2 ^% t& X目前测试这种方法没什么问题。; ]* l4 m( u0 `7 |1 A! ` G7 x
`$ H! ]. a* H
|
|