|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。0 f: \1 M; J1 s" y: c: V S
这次讲一下如何防止自己的网页被别人iframe。
+ ~! r$ v+ X2 A r4 E! w: A5 Z6 Y4 j1 s; r1 s
1、这些方法都可行,但不是太可靠。1 m) a' p- J% O* w1 X
- <script language="javascript">
/ g& N5 x: u! q. l k - if( top.location != self.location) top.location.href=self.location.href;* ]+ W: z( O! \
- </script>
复制代码 或
/ `7 F/ f I: w" k* I- \- <script language="javascript">5 x' w9 d4 n5 Q
- if (top.location != location) top.location.href = location.href;
) W# u4 Z5 V! l0 w - </script>
复制代码 或' A: N9 P: [* S; B6 n+ [
- <script language="javascript">' @3 c: z# L: P6 Z
- if (top.location != self.location) {top.location=self.location;}5 h5 O* d9 J- V. Z; ~+ ]
- </script>
复制代码 或1 c( W& T! t& K
- <script language="javascript">
+ _% D$ r% Z/ R ^/ i- a* R. ~ - if (top.frames.length!=0) top.location=self.document.location;
, q" D( U) b8 M+ P/ p' y% E4 @ - </script>
复制代码 不可靠的原因:: g3 G- c% g- p6 @6 ^
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。' }/ u: C2 f& Z: ]* @
- <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>
1 _1 R: `! g. ?! I; b6 ~' o7 D. [ - <script language="javascript"> . ]" m( W: X) i6 Z- d" N! i
- var location="";: E* C8 @) Y1 V# O, L s
- var navigate="";
' Y Z4 h4 l* W/ j: s- ]% R0 |1 g: Z: M - frames[0].location.href="";' L3 X/ a' a8 g0 Z
- </script>
复制代码 或1 c7 b* c7 H; V/ _
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或/ P2 y% x$ p' T2 ~4 G t
0 |4 G- i8 J& f1 `/ G# ^% r
- <script type="text/javascript" charset="utf-8">0 O9 t! Y! S! l% K3 R% 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>');
l& g6 @: j9 B+ g1 I) Q- Z V - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。; r* e# W$ Q3 @0 ^) W
Meta标签方法* s6 Y0 p( Y5 `6 ]6 J
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法6 q& W- z8 G! L+ I, Z$ l- J
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
9 _- k1 s0 F7 i6 V/ l0 { @6 w- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法: P8 U: F- x* d) ]: _
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 # m- T& b! j8 S) a6 Q% I* u$ |
.htaccess方法
# H4 Q" n: n$ X# v; |; H1 M; [3 Z在网站根目录下的.htaccess文件中中加一句/ P" }4 n8 z( D1 z/ u* `! x. f3 v
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
0 K+ G. L5 G4 d! [IIS方法# J$ `- ~; T9 U4 i& h
在web.config文件中加- <system.webServer>. F9 j' Y8 e( t8 }1 z4 J! B
- ...- ?* v' s g. t7 U
- <httpProtocol>- Y0 ]! f/ C! l/ f4 u/ l
- <customHeaders>& }# ^& K* p9 T( L9 N0 w
- <add name="X-Frame-Options" value="SAMEORIGIN" />
1 T# c. M' y9 I3 y - </customHeaders>
. ]% n. c8 K0 Z9 E. X* v- ~" e - </httpProtocol> 7 }, ?! h+ A: b) ^
- ...% u# E! y* `! Z5 G3 [+ J9 v
- </system.webServer>
复制代码 9 a! N" ^; f- x2 @* F: w% S
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。0 B( m# r, h$ p6 l& O) s7 V
8 h" L+ j, @+ p' E) |
3、推荐解决方法。1 N I9 v+ o! e) T+ x
- <script language="javascript"> ) X7 J+ |, K" Q9 W4 j5 z
- if(top != self){
0 l4 @9 D$ T" }# Q2 _% \ q - location.href = "http://xp6.org/iframe.html";
$ u1 [+ \# H0 v5 L9 x - top.location.href=self.location.href;6 x9 [' ^$ v0 l6 ^9 ]: ?" c# ~
- }
/ [% h0 j7 j$ V. F - </script>
复制代码 " O$ R, {/ h8 Y, Q' p/ p
将上面的代码复制到需要屏蔽页面<head>里面加载。
* X- R8 T& K9 G# P( v) j8 x制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
0 J9 T$ a/ l; Q9 i原理:: ~' L5 o- w$ s$ Y. d" c3 J
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
g; |5 F9 C! w2 l3 M1 l第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。' q+ Y; h1 w" M8 K1 n
目前测试这种方法没什么问题。
: I% F* M5 q. ]. b( G
9 G) e. N! @5 y$ G% M |
|