|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
# M% W2 G0 a# n0 W这次讲一下如何防止自己的网页被别人iframe。
2 J- Z* B( ~' C4 }5 {8 W4 J8 g. Z9 U2 W4 O
1、这些方法都可行,但不是太可靠。* f/ c4 ?! r. g8 w6 c2 ^( o
- <script language="javascript">
+ T/ L% d |( G/ m4 u - if( top.location != self.location) top.location.href=self.location.href;7 M) V$ L/ i7 T A" h9 g# G/ T
- </script>
复制代码 或. e7 e; z; L/ J/ |9 U7 ]
- <script language="javascript">3 L0 F. r+ v. U& A- ~( ~3 W4 K
- if (top.location != location) top.location.href = location.href;; {, i" ~5 y# X2 e% I7 i( s5 }6 Q- R
- </script>
复制代码 或
0 ]; O% W" n6 c) `" i$ ?3 O- <script language="javascript">
/ p# s% z9 L8 q3 O7 | - if (top.location != self.location) {top.location=self.location;}
L5 o: v! I, v8 Q( Y; V! y/ w - </script>
复制代码 或# i V( ]! q! U3 ?* {6 u3 b9 r$ H
- <script language="javascript">
8 k& J! Y; F6 S) V. q$ R$ t5 v# f4 v - if (top.frames.length!=0) top.location=self.document.location;
7 L6 E* p! x0 G& h+ _3 O" Z - </script>
复制代码 不可靠的原因:. ^6 r9 ^2 ?4 e: a0 O: v
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
$ [+ S2 ]/ i6 L8 p; X. N5 o- <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>
0 y i A5 ^+ L) [8 K0 j - <script language="javascript">
7 e+ Q- K( {5 k7 h$ ]0 ?' X - var location="";! ~7 {5 q. |- \$ B6 ^! c/ t/ D4 a
- var navigate="";
+ ^8 R/ F" x9 H1 m9 V, r - frames[0].location.href="";
) b( M% e% B+ [ - </script>
复制代码 或' v2 a$ K' s. Q! W
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
/ z9 w* @2 V1 g# w6 [' a5 _
D+ T" p! @; n- j- <script type="text/javascript" charset="utf-8">
5 R4 t0 Q+ e6 i6 _ ]5 Z+ u- A- Z - 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>');
- [# n6 q9 J4 b* z q% @, V - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。 W9 A$ }6 W; h7 g* m. w9 F
Meta标签方法
0 B1 b" s) I: A8 u7 G. K9 m) T* G- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
. A+ z" P! \) w* u- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
8 z' }4 i2 G0 _! n- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法& W( `4 H/ W; Q/ ^# F: }
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
; ]& j2 B+ ]. ^) [.htaccess方法
8 V! c$ k9 d7 e; r9 I在网站根目录下的.htaccess文件中中加一句
* w* i$ U, D9 N6 `8 z& }$ Q- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
' k2 U0 C. \: Q# W @IIS方法
: ~- |. L: Z' ?# d7 U! v8 }5 V在web.config文件中加- <system.webServer>" J# V% B* ?0 j# S6 `5 n
- ...
. H: f7 N" t5 R* j8 p5 n+ ]: r0 j5 A - <httpProtocol>% V7 u8 g4 O b8 |+ X
- <customHeaders> f5 G! t. r5 @$ i) Y3 u2 Q
- <add name="X-Frame-Options" value="SAMEORIGIN" />
' B |3 f% E( w+ ` - </customHeaders>
" ^- k7 D% v# ~ - </httpProtocol> / B. r3 Z8 v1 m
- ...
% F3 Q" ~( L0 I7 f8 m J8 S - </system.webServer>
复制代码 . j, y0 S( y& n8 }
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。3 V; }- H+ \9 t/ N9 d6 I {0 k2 f9 n
9 X3 h2 f6 n3 Q3、推荐解决方法。5 ]! h2 _- w/ N; _' I/ U
- <script language="javascript">
+ x C# p6 p& c" t! R" B8 Q - if(top != self){1 \5 f3 f# u, O: _8 [% [
- location.href = "http://xp6.org/iframe.html";
! E/ M }9 r# _9 s3 B - top.location.href=self.location.href;
9 @1 }- t8 A* K: ~( x& Q" K, L - } - N$ f/ ^' A2 _, _" J
- </script>
复制代码
% T& r+ i( Y$ j; Q$ O! Y0 Z: \将上面的代码复制到需要屏蔽页面<head>里面加载。4 c& u U% W3 _9 d2 l- z' I) ^
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
7 N h U, O+ t! d# C原理:# b$ m7 l, @& H) _
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。% }' s) V) [8 F
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
) q! b! k9 G F目前测试这种方法没什么问题。% \+ S5 {/ a7 F9 l4 H# ]
" f9 ~, x. |# n" A" N6 p5 {) ` n |
|