|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
9 z, |- b4 r2 ^6 g9 F9 q这次讲一下如何防止自己的网页被别人iframe。1 [5 Q- s! l4 ?1 n& D6 q9 W( ~( \3 G
: ?+ K9 U: o$ g* g K2 \8 q
1、这些方法都可行,但不是太可靠。& b( s6 ~3 T& L- U# Y
- <script language="javascript">
$ v2 n8 p' A& p# R7 f& B6 c5 O' C - if( top.location != self.location) top.location.href=self.location.href;
1 \7 I0 f3 Y, \& y6 Y+ u9 i) J - </script>
复制代码 或
: {6 T+ y- K; ?) b3 N- d7 `- <script language="javascript">4 H7 v3 U& k" d7 o9 @- H' q( T; ?3 ]
- if (top.location != location) top.location.href = location.href;3 D) J5 k- @$ a) q0 D
- </script>
复制代码 或; n: u. J3 X7 p2 o" f0 d
- <script language="javascript">& U( @$ Y, R/ s
- if (top.location != self.location) {top.location=self.location;}6 q1 ?' l/ }0 r0 z- ?6 D. m0 P
- </script>
复制代码 或) ~4 B3 A( n" }9 J
- <script language="javascript">: }/ e; F; C( z" C- `* }* g# o$ ]
- if (top.frames.length!=0) top.location=self.document.location;
6 ^7 L8 x; K9 f8 b+ ^6 o - </script>
复制代码 不可靠的原因:
7 h: h$ P- V5 _. w+ h当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。, h: p' s+ a& X1 J- S/ N
- <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>
: p+ @' A0 s( C9 J8 D - <script language="javascript">
/ p U% S; D: i5 [ - var location="";
. ?" k# h6 [% ]) | - var navigate="";
6 o2 B9 J2 _" Z - frames[0].location.href="";
: E6 v$ h6 l7 g' V; T - </script>
复制代码 或
0 N' f# c) D# [ L- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或9 o _ B* V; X8 E* S6 O1 ]- b7 L
! e, ?3 ]1 e5 F) M- <script type="text/javascript" charset="utf-8">5 ` u7 o+ j8 I! J g+ w
- 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>');" r1 Y4 c7 M, M- S. n/ X3 o
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
2 L6 V- }0 W. a! J) y! Q' H; bMeta标签方法0 r0 _$ J9 o8 v
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法7 _: b: a! K- ]! B
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
/ {" \! m9 q) [% d! X% Q$ X- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法' H; f T0 A; M: w$ b
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
. J. R/ S2 l0 J2 V ?5 D.htaccess方法
* m' [( J. d6 G在网站根目录下的.htaccess文件中中加一句
# p& V, E& `/ G3 c9 a- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 , z! m; ?) Z! |8 v" U; s" ?
IIS方法7 J$ S2 s* {) n6 a' ]
在web.config文件中加- <system.webServer>
% Y& i M/ v. D& C - ...
1 }* E+ d% R1 p8 _5 K P6 |' |" @ - <httpProtocol>
6 V2 P% T( t9 ~' O h. R - <customHeaders>
I% ^3 V$ j) P v. t h - <add name="X-Frame-Options" value="SAMEORIGIN" /> : \4 p0 a4 l$ ^6 l7 [) X" i
- </customHeaders> - Q; R. a* X- n$ Q4 {$ C
- </httpProtocol> 7 g0 M; _; N; `( S
- ...1 d% X# ]/ c% H" M3 A5 o
- </system.webServer>
复制代码 , p7 R/ p2 l1 x8 g
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。! @2 c) l% \$ t4 {$ g
: y3 a" Z' \: n3 J: B
3、推荐解决方法。: D' b8 J9 n Y3 B N& d
- <script language="javascript"> ) Q2 Q" i% K7 N
- if(top != self){
4 {4 I$ D- x& D; D0 s* m' ? - location.href = "http://xp6.org/iframe.html";
: E% Z8 p) w2 g9 M - top.location.href=self.location.href;
% a: H( e$ W1 B6 H: U9 h% h. \& j - } / s, V: T* K& ^* P$ x# I% Z. z
- </script>
复制代码
1 q, l- Q( _* y( }将上面的代码复制到需要屏蔽页面<head>里面加载。
: {6 w$ B+ h1 O \2 M& q3 c2 Z3 ~制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。7 H& i' x4 L! ~6 j0 W5 s! S
原理:
* y1 H) R2 Q: i1 c0 Q$ M第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。8 G4 {( q Q& x {0 _" @
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。1 y0 P9 E$ F. E3 |2 r
目前测试这种方法没什么问题。
- Z9 H' q2 ?+ Q& h& U& \* K
; p! ~7 C5 A' W; `: j. e' ^ |
|