|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
4 m% s3 O$ f0 \4 O6 X这次讲一下如何防止自己的网页被别人iframe。
" l! Y( ]! D' w4 i/ b1 |( f! C, m2 ^/ R
1、这些方法都可行,但不是太可靠。
# R: t, a3 ]; D; R4 }- <script language="javascript">. \: q5 Z a9 I/ Y9 s
- if( top.location != self.location) top.location.href=self.location.href;0 V' `1 L0 t' `$ G2 }) F4 R" X
- </script>
复制代码 或
* B- }7 o4 c) g- l" Q" i3 M$ L0 U- <script language="javascript">- L; y2 l8 ]$ G% a/ W1 n, M/ k
- if (top.location != location) top.location.href = location.href;
4 ?2 l1 q6 I( }; b1 @7 R - </script>
复制代码 或# M! _1 k4 F: i( S- y1 L$ S" @
- <script language="javascript">
! @1 z2 ?8 a z+ X% ^ - if (top.location != self.location) {top.location=self.location;}6 S" A% @' \% A( F, s
- </script>
复制代码 或3 H: ^# {# Z7 Q5 t+ W' v5 M; o. X
- <script language="javascript">
; |7 U- l) S3 N7 P - if (top.frames.length!=0) top.location=self.document.location;
3 E: q! O7 H; }4 M1 k - </script>
复制代码 不可靠的原因:
( R& t% ?1 }6 A+ c" m当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
# R u& e% K# y9 W0 p- <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>
0 T+ u; G( C" p' n" D2 | U - <script language="javascript"> ) a2 h! X& I3 J I/ ~" B* b, K
- var location="";
) b/ Z( B8 M( e! Z* K - var navigate="";
% M X; {& d5 T0 d - frames[0].location.href="";
- e. ]: b* t1 j5 \ - </script>
复制代码 或
) k9 [/ {, S$ y8 l* D- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或! `+ g4 P( N9 p7 z/ a3 S6 S Y
; L9 k+ k* G" U3 Z8 Q% U( w- <script type="text/javascript" charset="utf-8">
' ~. K- ~) q, e8 J6 w$ a - 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>');
# ^: w; b) I2 x0 a; U. j - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。1 _# \) P( [1 d2 n# M
Meta标签方法# J; x$ Z- Z. I5 d
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法, M% q! S9 z4 R8 r% F5 O6 [2 e
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
: \4 L" Z. Z- I1 R- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
, J) l9 W0 ]7 G4 n2 H' d ^- add_header X-Frame-Options "SAMEORIGIN";
复制代码 & H6 c" a: N4 B9 z, h* N) ]* m
.htaccess方法
3 z3 D" U6 l7 I2 } a. _在网站根目录下的.htaccess文件中中加一句
4 J7 \" x8 ]( Z8 m9 o6 c- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
! T& t8 I! R6 ^5 Q, zIIS方法
- n, u2 ^+ @3 \3 D/ W" x! f5 [8 r% } O在web.config文件中加- <system.webServer>3 |( D! _! F& Z% K# d" U d2 [" {
- ...
3 g$ u% }4 g9 M, r8 d - <httpProtocol>! s2 ^! |- ?! C) g4 N! i
- <customHeaders>
/ |+ W, t. K3 i8 u3 Z# \8 T0 R - <add name="X-Frame-Options" value="SAMEORIGIN" /> ) y9 J- _, s$ j& E# \1 `8 ~
- </customHeaders>
$ g, m0 u F' w' k. f - </httpProtocol> & I$ o/ z& B& X |: L& I
- ...
8 t8 r! {) X$ T6 a& y. g- }- |: h - </system.webServer>
复制代码
( e$ y1 q" ^ t+ E* y之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
2 ^5 j0 g& q6 U1 b& U) C
7 I0 X% w5 G1 C3、推荐解决方法。8 w1 g1 f9 V7 ?& ~
- <script language="javascript"> 0 }$ N0 ^; I5 Z/ C6 h4 M: k
- if(top != self){
9 I, d. ~! H0 }7 C$ C3 I - location.href = "http://xp6.org/iframe.html"; ( u2 z2 C d) `% e& K
- top.location.href=self.location.href;9 ]: z& Q8 M# a2 k j, c# Q
- } . u+ i F' D& V6 g0 ~: C. ?# ^
- </script>
复制代码
; {1 w( [+ |" A3 r% j将上面的代码复制到需要屏蔽页面<head>里面加载。* s! L7 b, k- ~6 |* i
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
) ^. ]; }0 [+ S0 ^原理:
# T$ r5 @: o% B* j% `( k N第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
: d3 A- Z1 r0 m: p1 g3 p* G第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。& i# t6 S+ r% m. B7 @
目前测试这种方法没什么问题。
6 J! E7 e3 v' U6 ]/ v, G) E% ]/ U! {3 \
|
|