|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
t5 r4 X# C. k5 I ?这次讲一下如何防止自己的网页被别人iframe。6 i- J& Q" L/ I1 u# z
: Y2 |, s' l8 l1 P- a7 A: Y2 @/ s
1、这些方法都可行,但不是太可靠。1 y" y6 Z' D# _ ^* n
- <script language="javascript">
2 b9 o8 ~: i% ]2 y0 y - if( top.location != self.location) top.location.href=self.location.href;0 u1 v; f# M, @
- </script>
复制代码 或, l. N- q3 z9 M( a3 e, L
- <script language="javascript">
8 \* r6 ]8 [0 X6 g6 @( N! A: D1 i - if (top.location != location) top.location.href = location.href;
/ i1 B$ Z# @( r - </script>
复制代码 或 ]/ c; `6 T1 l4 A
- <script language="javascript">' v5 n) |( a/ L
- if (top.location != self.location) {top.location=self.location;}
9 ]& p' B/ j' V4 J - </script>
复制代码 或
8 R" \" z, N' h9 n) _& p( h- <script language="javascript">
% u, |" O! h3 D" ` - if (top.frames.length!=0) top.location=self.document.location;
# I0 I$ v! e+ e8 s# I - </script>
复制代码 不可靠的原因:
/ S. e# U7 A, F2 A) t7 [: u" N当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。# ^8 l6 x) K. ^1 h% B8 K, t7 V
- <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>, ^6 Y1 h- N) |: j7 P
- <script language="javascript"> , l; N4 l( v8 z6 W4 w/ P
- var location="";
, C) C, y' ^/ j- n5 X9 Q) x( Z - var navigate="";0 @0 k6 W7 Y2 Z
- frames[0].location.href="";
9 f2 g1 d. L# n$ `. r0 V - </script>
复制代码 或/ n) o9 F& }* p$ A
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或9 ?4 J# c5 l" T- Y9 _
+ {. X/ w% N' K. o0 E A9 _- <script type="text/javascript" charset="utf-8">" p* |8 X0 c z. _& x7 }5 l' k
- 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>');7 m: X) v0 z2 m2 X# v" i6 L0 o
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
( Q. H# i- L; B2 k. q4 k3 AMeta标签方法6 u5 I4 H7 J' K+ f( B
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
1 n0 Q8 k: P! |- y3 E2 l% @6 W- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
/ _# j7 G {) d% h/ O/ K- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法9 F. z) ^& @' K8 }
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
- F& ~) v# `2 i0 S& d" U.htaccess方法7 K4 G1 r' z# f
在网站根目录下的.htaccess文件中中加一句
$ m" F, X0 d! @) A( S ^- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ' w4 J0 X/ q T8 }+ H
IIS方法
: S1 Y2 N: d) H' l. w; Q+ V在web.config文件中加- <system.webServer>! |+ Y' n, {# u" ^
- .../ F; r! t& u- ?
- <httpProtocol>
) o4 H) P! f) j) } - <customHeaders>1 u8 i1 d [2 ?' P% a& D6 Z' S
- <add name="X-Frame-Options" value="SAMEORIGIN" /> " {' o( e- [7 k
- </customHeaders>
6 T# C, E+ f% V) k: y - </httpProtocol> & ?$ y, {& ~# ]% a- _0 h
- ...
# ?2 a( P# [' Y4 b2 x+ m: ]* P& X - </system.webServer>
复制代码
$ T6 H" g/ V" P" O之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。1 [0 I D5 ^ R5 b
4 o: Z3 K8 t2 m z0 _3、推荐解决方法。
7 u; k/ m( F3 [0 y- u* L- <script language="javascript"> + z0 b4 @/ D" f3 q, A1 P* `$ u
- if(top != self){
5 H/ v& D: G n0 \ - location.href = "http://xp6.org/iframe.html";
' J8 g% m* D/ \5 w - top.location.href=self.location.href;
7 Y5 L, f2 s, ]. b - } H3 K" t4 {+ L- @1 Q! c$ G! R
- </script>
复制代码 4 p. Z! d" I2 Q
将上面的代码复制到需要屏蔽页面<head>里面加载。
$ k# |: i4 @: p7 Z% A5 k制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。7 f3 _( k' x3 T3 q+ l
原理: I! U* Y$ N0 ^4 M4 z8 ^0 h
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
7 ^. s+ R3 \) H8 k( A9 ~第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
2 c3 B5 {3 E* ?目前测试这种方法没什么问题。
/ z) Y7 S J2 {4 w
0 b+ E; l0 K) Y8 L* ^6 t |
|