|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。6 y, ]/ J' ]% s7 z+ S, `
这次讲一下如何防止自己的网页被别人iframe。
6 t: X6 u. t; S5 x4 `9 m: `: h% y
5 d- E5 d9 g# b5 q4 W" X1、这些方法都可行,但不是太可靠。
, Z& l) H$ G, @+ l F- <script language="javascript">, G2 \8 L+ [5 |9 E2 t
- if( top.location != self.location) top.location.href=self.location.href;+ o% ]: c& _6 V( f* u
- </script>
复制代码 或8 s, j9 t/ a1 d1 m9 _3 |- M9 T
- <script language="javascript">8 V( ]' B; g/ p* r3 R" `
- if (top.location != location) top.location.href = location.href;0 N$ B, p0 a+ o1 s0 h; m8 H
- </script>
复制代码 或
C: _: m7 H1 _ b0 Z$ G1 G5 d- <script language="javascript"> D3 A8 d6 C8 q, z! [% C1 L
- if (top.location != self.location) {top.location=self.location;}
! W% s/ K2 ~. P9 T& K! g6 s) j& x - </script>
复制代码 或$ O4 L. |+ P0 j7 G/ }8 @3 j
- <script language="javascript">
4 E6 n% ?/ e2 t, d( [" c - if (top.frames.length!=0) top.location=self.document.location;8 |) N9 T$ N4 [+ I) h: C: `- D
- </script>
复制代码 不可靠的原因:
# g/ w; K' x. R3 e当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。. |2 S$ J. L" j; ] C( R* l
- <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>- K% n3 K: X1 [9 ~
- <script language="javascript"> , ]' [ r% m6 E: T
- var location="";( h3 r6 u/ x) e9 A! r% g, I
- var navigate="";
! P; y% B- T3 q1 L( }/ @$ d5 n: r - frames[0].location.href="";( g8 t, v5 s5 @/ j( s2 x. I
- </script>
复制代码 或: N8 t* r# V2 O, U
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
, N( x, C' G2 K/ I2 m. r* W9 p I6 X3 ^ I: Q" f, }4 s
- <script type="text/javascript" charset="utf-8">
) `, M# z% ?9 S) T( y - 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>');
, |6 l: X# w( N$ q - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
$ @ S% x+ s6 L, t ^( _Meta标签方法6 o6 D0 y1 O# [: ^$ y( Y% R* x& @
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法. M1 l. ? n& z! \
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
% r: {# a" m/ D- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法" d# ~% D! G+ u( E+ v7 P
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ) t* R) o& S) m6 O
.htaccess方法
' j$ `; C7 |6 P l# P在网站根目录下的.htaccess文件中中加一句
$ Q3 u% B9 f {- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
- U8 A, S9 U! Q5 E% l2 YIIS方法+ Y* Y" N. m l- B( z! c( j
在web.config文件中加- <system.webServer>5 K9 H2 R) o' X8 s+ M X$ E3 s% M- F
- ...' b- Q1 e- E. D2 t# m
- <httpProtocol>& r* T8 W4 @/ L F
- <customHeaders>
6 }3 J W& Q' O- G - <add name="X-Frame-Options" value="SAMEORIGIN" /> * K, l8 B& b1 Z8 l, F3 \) h% L* b4 c
- </customHeaders> 8 @4 m2 j5 A, c, K! z0 ?, s
- </httpProtocol>
0 t; u( V( ]) H8 D! L, C - ...
. m5 R& o6 H1 T: _) i: K0 b - </system.webServer>
复制代码
0 c- J1 ^3 z! ~. y* {% ?0 A之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
( T) e9 [+ }8 U5 U* C% w2 m1 M
0 x }4 e u* M. l3、推荐解决方法。) R# k' q- L& f0 x$ Y+ |# H
- <script language="javascript"> # C" H& i: B! ^' I* ]
- if(top != self){
) k! x+ Q ?, @( \5 u4 t) @4 F - location.href = "http://xp6.org/iframe.html"; R9 ~1 S& e$ K: M( D3 d! C1 h
- top.location.href=self.location.href;
5 A& C$ |& r. R- v) N& `7 ^7 L# F - }
4 J' V9 D5 ~- @7 w! r! t - </script>
复制代码 7 K- s1 r# j- K3 d
将上面的代码复制到需要屏蔽页面<head>里面加载。
% l& c- I" B. ~* e; `制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。5 G" X w0 c* C: x$ F
原理:$ E }9 D5 ^$ ]/ z
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。" r/ t8 J! K8 z
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
+ U& q6 A5 }* V/ t$ ~1 K# h目前测试这种方法没什么问题。
2 t5 U3 p# F4 ^! p% Q% O1 G3 C, F+ j& ^3 |3 k
|
|