|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
- ~# \: J$ D8 Q5 }这次讲一下如何防止自己的网页被别人iframe。
9 J: s6 y+ D' y: _7 _/ G7 Z3 ^$ j8 H+ ~6 T# \
1、这些方法都可行,但不是太可靠。
$ n2 v t( e- @- <script language="javascript">
& o! l: g, M$ ~$ c - if( top.location != self.location) top.location.href=self.location.href;$ d5 d- [: }( d: F% r
- </script>
复制代码 或
% Y& g. F9 u* i' K, r- <script language="javascript">
: D4 z- |2 ?1 M/ u4 w" \5 C$ c - if (top.location != location) top.location.href = location.href;8 }; A% S# v+ W8 B% ?
- </script>
复制代码 或, Y4 I( i3 {. K+ a% ?! e
- <script language="javascript">; h- `) {! ^: g8 I! X
- if (top.location != self.location) {top.location=self.location;}
: M0 p6 y0 B! c+ X7 z6 R" R - </script>
复制代码 或/ `/ S( Y+ s, I, P7 _& @4 e
- <script language="javascript">7 Q) I9 |4 V0 Q, h# X2 b5 w0 x
- if (top.frames.length!=0) top.location=self.document.location;
3 A- ^6 X8 g( G - </script>
复制代码 不可靠的原因:6 p% T" j+ U5 v5 v( P
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。+ C$ f$ F `# n: O0 M2 I
- <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>. Z3 z! f, Z: X& K3 ]0 Z7 J. Y
- <script language="javascript"> e8 l$ {% z7 f3 I, X) c; L: b
- var location="";$ @8 k" c* M4 b
- var navigate="";. w7 Z7 _- K; q7 F; k# I7 Z- ~% L
- frames[0].location.href="";
" W. ]1 g3 l( j4 k [2 | - </script>
复制代码 或4 {# N" l q* Y8 D
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
- O! s2 J6 G% c+ a: J. m' t
5 r% h% G& E# `- <script type="text/javascript" charset="utf-8">
. p% Q7 l+ H0 X& q! w - 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>');
& N+ N2 w9 P* p0 r2 H$ v# t - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。9 K7 A% c$ Y8 e" S" f! r
Meta标签方法
8 e- S o, |- E- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
! { I4 n- W6 Q/ A0 [- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
% v- J' q8 j1 T+ x- ^0 Y- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
( F; i a) b0 u4 x0 D- add_header X-Frame-Options "SAMEORIGIN";
复制代码 + x3 v7 f+ }6 Z- P; t; b8 Y& _2 i2 @
.htaccess方法
p8 {1 Y( R8 c3 H* E0 P在网站根目录下的.htaccess文件中中加一句% Y9 d/ k: `8 R$ y
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
1 s) }: O4 c5 L1 g, {4 DIIS方法5 C" ]3 H3 I- t+ i' f# j2 g6 Q, {
在web.config文件中加- <system.webServer>9 }# I/ T1 x2 k/ l+ b
- ...
3 n! b8 g4 N, j' H1 h: H: w2 H3 L h - <httpProtocol>
: F' t- Z8 C# T* n9 F+ ^9 a - <customHeaders>
0 U C) U0 `; g# l' M% J - <add name="X-Frame-Options" value="SAMEORIGIN" />
. e5 n G* E* `, `7 x6 t0 y, D - </customHeaders>
4 g4 i4 j* `' n2 z2 G* ? - </httpProtocol>
. v. J* i( x/ F# l, C - ...
O3 b* L/ E' ~3 A# m+ l7 s* q1 y - </system.webServer>
复制代码 + H7 Z# ]7 G0 v4 l
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。: ^) f5 o+ h U% B
; k, T+ f l# W( F; V' B
3、推荐解决方法。
' _ J: B: V" l; H5 f6 n# D% @' c- <script language="javascript">
- E. t4 y1 w5 C! f. N' N0 ^* n# L! ? - if(top != self){0 I h- H- x+ Z2 l C0 O
- location.href = "http://xp6.org/iframe.html"; ; D$ j# A; G: [
- top.location.href=self.location.href;: o) P3 I: ]7 M! w# b/ S6 U
- }
$ t7 q( m; `) q - </script>
复制代码 1 g; A- z9 I1 k
将上面的代码复制到需要屏蔽页面<head>里面加载。
1 g( B+ c; h$ q# e/ ^1 e制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。: R& R1 R* o5 y0 T7 S) C# w
原理:& c' ^6 _8 U: r4 I' k( |9 U
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。. ?7 w$ _" X$ y# n2 f5 R
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
$ H! r% ~" T$ z& k3 a3 w' {+ X& G( G目前测试这种方法没什么问题。5 ~, J+ t( v! \
e* j2 }+ p2 l; p7 X: g9 O2 M1 s* f
|
|