|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。; a# I% ~, m6 c
这次讲一下如何防止自己的网页被别人iframe。
- D/ J" X- |6 c0 J8 G& y2 {
! T4 e0 c+ `, W: d1 m& N' |* }, u1、这些方法都可行,但不是太可靠。
0 s: ]# O/ y# w, v- C, e- <script language="javascript">
2 o$ X* o; v y/ b8 Y$ d$ g - if( top.location != self.location) top.location.href=self.location.href;
+ ~+ g/ p9 k5 p# V2 u - </script>
复制代码 或
$ A( N f) V" E! j0 J/ z& f- <script language="javascript">+ r& T$ P2 V. K9 x
- if (top.location != location) top.location.href = location.href;
- _2 P& H' c4 s& ]" N - </script>
复制代码 或$ v% n6 \ Y$ U4 ~1 w/ Y9 m
- <script language="javascript">
0 f8 V Y+ \! Z9 y7 |, ^ - if (top.location != self.location) {top.location=self.location;}) a$ K! b' q+ M y, }# m' g
- </script>
复制代码 或2 L6 D* m; x* F1 w' k
- <script language="javascript">
1 R" r( M* Z* L% J1 ~/ N6 H - if (top.frames.length!=0) top.location=self.document.location;) v! c( W; y# U
- </script>
复制代码 不可靠的原因:; e' E% b$ j3 c4 z, G j& P
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。4 m7 d# u6 A! K: z% z
- <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>( o# O3 U0 G2 i1 m
- <script language="javascript">
2 ?# z% N8 y9 |5 d! x - var location="";
4 ~+ J, z7 k# ]0 U - var navigate="";: V( q* B% K1 w. X
- frames[0].location.href="";: d1 F. _' U+ ^/ w0 Z! h
- </script>
复制代码 或
7 ?, a) { G4 h; W- [2 J- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
, O6 L" x! O- a* I; @# w7 @: \, G6 ?% x9 R: V" z
- <script type="text/javascript" charset="utf-8">9 x7 u/ ]# J/ o% 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>');
' i4 l# a, p( |! q4 } - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
/ m0 z2 h, l# G& v( I8 k' t1 mMeta标签方法
% F5 {' b5 [, n# e7 U# b6 ^1 Y- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
- n: j U' I# @; v* v- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
6 N6 d* q. B, j0 `- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
+ }! H5 C! p8 k0 u. K/ a# i- add_header X-Frame-Options "SAMEORIGIN";
复制代码 $ M3 U( s/ _# ]/ i
.htaccess方法9 K5 z- t/ I+ m4 L5 ~# C6 U* _
在网站根目录下的.htaccess文件中中加一句
# T! v2 ^3 @/ O) R4 S: b- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 # G- U# j s% j9 q; s- H9 @
IIS方法, \8 Q( D9 k0 N' l+ ^
在web.config文件中加- <system.webServer>
# ]% h. U+ [$ @# k - ...: t E' K6 t3 c( @3 T3 p% M
- <httpProtocol>: T* |7 G3 C$ y( W1 l) Z& }! h
- <customHeaders>
) t$ l) E- X/ q6 e - <add name="X-Frame-Options" value="SAMEORIGIN" /> ; j0 ~$ L& S9 W! X% E" v4 G# z. Z
- </customHeaders> 0 R$ ?# J7 ^4 C- Y8 O8 W
- </httpProtocol> ' F7 M. u |( ?/ _$ |0 r# S
- ...! y0 p( @; w/ S4 a
- </system.webServer>
复制代码 4 `+ O0 K: i3 E$ U/ Z1 _
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。$ B- f5 b3 L( v
$ H+ ~! t! W& L5 C3、推荐解决方法。
4 }! ?* y) L$ M! N0 A2 X- <script language="javascript">
) f& a4 y: c" M/ ]. X. T - if(top != self){
5 {; ]# Z8 t5 v2 ?7 r - location.href = "http://xp6.org/iframe.html";
6 }- x' i+ {# d' @ - top.location.href=self.location.href;# M4 |* h( M2 n9 D0 c8 D
- }
6 s/ C0 \7 r- c: _+ F" Q: H - </script>
复制代码 + y/ m2 U% i3 l) W0 T- i+ y3 O! }
将上面的代码复制到需要屏蔽页面<head>里面加载。; ^1 D8 Z \" c' n' g1 [
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
- I( W" k# T; I0 y* Q1 G原理:% z, c6 _' k5 `$ O! I& k2 S
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# c/ Z- ~3 a$ L& Z: P第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。1 [- F& z( X$ L2 u2 G6 h5 r, h
目前测试这种方法没什么问题。# P; G% e2 q5 ], r+ @$ W
7 s& ]8 C$ f) C7 }# \ |
|