|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
) i! p, R: d7 Z% U" u1 `# T这次讲一下如何防止自己的网页被别人iframe。
: {! r2 H2 U6 d7 ?/ n3 q4 g. a( x d0 h# C$ J! @2 Q
1、这些方法都可行,但不是太可靠。
( O4 i: e6 {# h! p( x- <script language="javascript">
. h" m3 ~" q& H/ f# A' H - if( top.location != self.location) top.location.href=self.location.href;8 }! l0 N' K: D) s
- </script>
复制代码 或
. ~) m* S. j9 d9 }9 x( L+ ~" ?- <script language="javascript">8 C& t# e8 y; I8 m7 L$ A1 S. n
- if (top.location != location) top.location.href = location.href;
9 M! p& p3 S/ H) J6 p O1 A - </script>
复制代码 或0 p( P& Z8 Z4 ^+ J3 |
- <script language="javascript">
' ^/ t8 H% S9 [. E" w2 ]0 i+ M - if (top.location != self.location) {top.location=self.location;}: o* w; k+ ]' N) M. o
- </script>
复制代码 或# C/ `5 b8 t1 H% f6 a2 r! L3 `
- <script language="javascript">9 t' l3 I- Q6 X; @
- if (top.frames.length!=0) top.location=self.document.location;: }$ D. X5 D9 l3 }1 k7 U8 Q; L
- </script>
复制代码 不可靠的原因:
: ~3 N# M( p9 [+ e9 `$ c2 V当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
4 P" r- M; v2 ]- w# d- <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>4 F8 y( g8 B% p/ ^" d
- <script language="javascript">
7 H8 r' _- W3 L( x - var location="";1 f9 a$ u+ y. H) P; h; u
- var navigate="";' _$ w$ ~* t; g) P1 ^1 I0 U
- frames[0].location.href="";
' p1 O3 u5 p U. w - </script>
复制代码 或
2 ?1 T: N- Z1 P0 [# y2 k$ y- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或# P3 \+ ?8 R0 j% M7 k, A
/ ]* {% V( _: v; a- <script type="text/javascript" charset="utf-8">$ R& J# m% h, E1 D3 r& U
- 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>');
e7 f# S7 H, O4 z* T - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
1 ~9 A& z% U0 q0 j0 tMeta标签方法0 X% \" K! D) K- N9 I6 h+ i
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
+ p. R7 d: M! k- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
b# }! T( h+ G* b1 C3 ?- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
1 u, m9 r; y* ^6 M. X% y! Q- add_header X-Frame-Options "SAMEORIGIN";
复制代码
) \5 k+ b* R# m% w.htaccess方法
( E$ `0 w3 j$ _0 V) ~; u: H在网站根目录下的.htaccess文件中中加一句
9 G. N, w# m5 E* C- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 6 j6 }/ A. i3 E @" `1 P
IIS方法
, J. \( T. H) z; i, a7 a V2 D" h在web.config文件中加- <system.webServer>
3 q6 ~. D* Q7 J. p ^ - ...
/ D' b8 K1 I- ?6 Z$ T$ w) F: l - <httpProtocol>
" J v6 ^/ k( u+ S; j - <customHeaders>
" o4 X- X- n S$ ~ - <add name="X-Frame-Options" value="SAMEORIGIN" /> ' P* q7 l- p" G/ m4 M, b
- </customHeaders> 0 Q I6 s; g$ b% \# b$ J
- </httpProtocol>
6 U3 ~' I; G1 g# u5 E0 A% M/ G - ...6 h- Q7 L, ?* x; n, J( T
- </system.webServer>
复制代码
K6 I7 v" f! Z! v* K+ F0 U7 r之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
' z" c2 T/ p* r b) D+ z6 N. g
* u N6 Z* P& G1 j% d1 X3 @$ H/ }3、推荐解决方法。
1 i0 Q) n, U+ D6 F- <script language="javascript"> $ @7 X! T1 h8 A# T- I2 h
- if(top != self){
- T" w9 s4 h& C! c- k - location.href = "http://xp6.org/iframe.html";
) H7 Q' h5 A( ?5 i - top.location.href=self.location.href;
' ]; R- C$ j) B) c% S: X - }
8 L: A2 g1 a9 I! X - </script>
复制代码 3 [, B- R8 |2 J
将上面的代码复制到需要屏蔽页面<head>里面加载。
6 ^3 c" \1 e# Q8 g+ g制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
( o8 f7 b( [* B' N& u6 L8 r K原理:# M6 f7 m, i7 h, x I) ?3 b
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。. P6 U4 x# P: n3 w2 x! V
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。 Q0 P: H( Z) C# Z4 p. o" o# ~4 c6 R
目前测试这种方法没什么问题。
9 y! B" ^6 |3 z: a- z& B8 P2 n2 ~* P5 d, V
4 @+ x0 K9 q; E- c |
|