|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。/ C$ ?- [5 T4 I9 Y6 W! i- N4 d- B: Q
这次讲一下如何防止自己的网页被别人iframe。
8 x4 ]2 N, r: t' O% c0 A; W7 y5 }( h* W7 \# M
1、这些方法都可行,但不是太可靠。
" h" _+ [3 x4 ^/ Z: M. V$ i- <script language="javascript">
9 ?- K2 Q. x$ K+ T - if( top.location != self.location) top.location.href=self.location.href;
6 o$ M( ~9 x) [# T ~ - </script>
复制代码 或6 @& B9 X* H4 ^
- <script language="javascript">" t4 p4 y/ k. V B, @' p# ]
- if (top.location != location) top.location.href = location.href;
; f* H C( F' b* { - </script>
复制代码 或8 @0 K+ q5 i- H7 s/ ^, ^
- <script language="javascript">
% P- v$ `" o, ?4 @9 M - if (top.location != self.location) {top.location=self.location;}
9 @) e! q3 }; r' t* |. [9 ] - </script>
复制代码 或
+ P i) k# t6 M3 {5 ^ T- <script language="javascript">, d' t# t9 ^$ D3 ~, g# \- g4 x
- if (top.frames.length!=0) top.location=self.document.location;
' l6 [2 v' B$ a! { - </script>
复制代码 不可靠的原因:! a6 _- e& L+ s% m" H* a- K
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
2 P$ K' A T' t0 F- <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 `$ Y, x) w# d) W- W% f/ ]4 j - <script language="javascript">
2 r5 c$ o! J6 [7 r; \) D" u7 C - var location="";
/ f; d( o3 A! c0 j# A - var navigate="";
( Y) m& B: Z7 ^* v7 Y4 a - frames[0].location.href="";
1 X$ y' o# \/ }- {6 W) B; m - </script>
复制代码 或
. g! P" t6 k E4 }1 c. {- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或- u7 k4 t* A# ?" ]6 P4 `# h
y; \/ ?- }7 W, ]7 J
- <script type="text/javascript" charset="utf-8">: V- D; ], m! d! s8 \2 i% L {7 u' X
- 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>');
4 e" n( r' t' ~2 J - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
5 [0 m9 m: G$ f" B! C7 |3 EMeta标签方法0 m$ f* o/ a. p9 h
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法4 F( [! |8 z0 y0 y' f4 A
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法5 g, J* S) d- M$ ]- |
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法0 J" R4 r7 W, `1 Y
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 + z+ }7 j6 }* P8 z7 o
.htaccess方法# m! n1 @+ s' M7 }
在网站根目录下的.htaccess文件中中加一句
. D4 P& z" t5 z3 a. O, G' f- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 9 H: x& G( x* l! R6 ^
IIS方法. p+ C: F5 A) l b& d7 t
在web.config文件中加- <system.webServer>* {3 @6 L/ H2 p+ Q$ p D. [3 `" m$ ]
- ...
: k0 G6 R% B, d$ Y - <httpProtocol> F7 J4 h3 L( N0 A# A: J
- <customHeaders>
1 v& a8 N" C3 l/ j- l6 u3 x - <add name="X-Frame-Options" value="SAMEORIGIN" /> 4 M* x! K2 v$ Z# O: a
- </customHeaders> 3 u! C- z2 O$ e5 Y6 [
- </httpProtocol> 1 d( a+ L" D8 V0 g2 L6 y/ i2 O
- ...
' N# j+ q) g2 o0 N - </system.webServer>
复制代码 - }3 ~1 B, y u6 {6 W6 A, n3 @* s
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。5 d+ r, @! ^% a$ q# i8 L
, H6 ?/ c! i: E* c M: a
3、推荐解决方法。
6 ]( E" P6 o' g9 C" b- <script language="javascript">
$ A6 U4 o4 W8 K' a& s. G6 U - if(top != self){1 K" B7 b2 a& l7 h+ W
- location.href = "http://xp6.org/iframe.html";
; S" c0 [) B4 f - top.location.href=self.location.href;; j! B, Y2 L- H
- } B5 h* ~& p; ~* K# l7 K6 F& D2 d
- </script>
复制代码
. Z, t5 M! u- M将上面的代码复制到需要屏蔽页面<head>里面加载。
; f3 w( Y5 t" R( n7 g' u制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。, ]; T* n0 W7 O" i. F
原理:3 A0 L/ X3 x6 r, O7 \/ f& D& l
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
6 W8 l# B4 \" C$ A第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。$ V0 R1 b' V. d; H. H
目前测试这种方法没什么问题。
( X2 ]8 G- n' x) i* P$ U
6 [ p! ]+ h+ L, {$ L |
|