|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。. o( U& x1 l% v: t
这次讲一下如何防止自己的网页被别人iframe。
$ @& _9 ~, F3 Z' p: q. [. [' i7 O# {
1、这些方法都可行,但不是太可靠。
2 v7 L- S' L8 C- q2 n1 @! L- <script language="javascript">7 J6 ?/ M6 ^- T; o4 n
- if( top.location != self.location) top.location.href=self.location.href;0 R( y9 e9 O# g3 L; h4 I
- </script>
复制代码 或
8 @! p# e; e/ `) R9 c! i- <script language="javascript">
" j$ A: @) ~6 v m' F2 L - if (top.location != location) top.location.href = location.href;
( j+ ?: G' _! ] - </script>
复制代码 或
9 \, L) l: g O5 b4 `, _4 S# {- <script language="javascript">
, \8 t$ {( o9 h/ D# X0 g3 O8 | - if (top.location != self.location) {top.location=self.location;}7 V$ U& B* w! ]. [; L: e/ _3 N* E4 T
- </script>
复制代码 或
% T+ q, O4 ], R: C9 @% }- <script language="javascript">
/ H2 k/ p7 `1 H5 C( [0 B - if (top.frames.length!=0) top.location=self.document.location;+ [' R2 [$ p4 W" K, t. c' J& \4 P
- </script>
复制代码 不可靠的原因:
) F, ~" x4 l" S7 {) V& w当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。' f7 I, Z" _. ?1 l4 p& F
- <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>' X- F# u( \# b, O/ \
- <script language="javascript"> % ]4 P# u% L& h0 A! A' K9 r. x
- var location="";" F0 m9 `" R3 o# R% a: E
- var navigate="";1 D2 p3 x0 B/ f& M+ A% l2 J; r+ S
- frames[0].location.href="";
6 w! Y5 f1 A+ M" }& H$ o - </script>
复制代码 或2 s7 S D+ I9 d
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或" {& U8 J% H; {0 @8 J" j2 D
* C8 U5 Y4 t2 ?9 i- C- <script type="text/javascript" charset="utf-8">; N) r: j, _& t; H t9 h
- 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>');
4 i* [6 ~% B f9 w. D- |. C2 C2 q - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
9 o0 P! S4 L% \Meta标签方法7 V7 B1 e4 U. W1 m' j8 s5 u) t) J& t6 }
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法" v& N6 `! X$ j# O8 U3 y
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法; x" {7 j8 M5 c6 R
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
" e( E; w9 V4 L# ]- add_header X-Frame-Options "SAMEORIGIN";
复制代码
5 L1 K" [/ k% `$ N0 j.htaccess方法
- K- k- J0 Q% l# q. U在网站根目录下的.htaccess文件中中加一句4 S0 w+ T( a4 \
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
$ v6 p5 H c# g" E# \IIS方法
5 C) \% {, G. y8 Q% o4 I在web.config文件中加- <system.webServer>
' s F& K8 P7 g6 M! R+ H9 M - ...
1 c: }0 q2 J5 [* ~8 S - <httpProtocol>; z$ D) }) ~; R' X' E3 m
- <customHeaders>
& _, M! K6 O: A9 ] - <add name="X-Frame-Options" value="SAMEORIGIN" /> 2 g6 a" }2 \2 v' D# ~4 ?
- </customHeaders> 3 o P( O7 O$ O( o' L9 ?; k+ I
- </httpProtocol> ; F+ G+ O& `) e0 y$ n
- .../ I/ m& L! _& ^
- </system.webServer>
复制代码 ' {( p6 C! b2 B; M
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
* n2 \% R; f- |6 j P* m! x
8 q# t. Y5 e; m3 q3、推荐解决方法。1 e/ @" d( Y" G
- <script language="javascript">
, t9 m/ a) p. U: k# F' q - if(top != self){
& m0 m5 @2 S, [* u" g' _ - location.href = "http://xp6.org/iframe.html";
" G! @9 a) |2 }# j - top.location.href=self.location.href;+ G# z1 H- f- W1 B" s, K! h
- } , P$ m& ~# \2 E! L2 _( C* E
- </script>
复制代码
2 {- ^9 P$ Q3 E1 O# Y: z9 I将上面的代码复制到需要屏蔽页面<head>里面加载。
' c2 l2 {. g& Z% V制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。6 E% K% ~- V3 W9 J0 X7 s
原理:
( E% r6 H* F: x, T第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
0 s5 {+ L4 W1 F1 n* G$ Z7 T; F' c第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
7 c, T, l, s1 Q2 H7 O目前测试这种方法没什么问题。
: ?, }& [& }, |+ I& L* m' v- v# [0 y8 n2 N
|
|