|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。+ A% N& U! y1 F+ ?' p1 @- a
这次讲一下如何防止自己的网页被别人iframe。
; w. |; g/ \9 Z( D: @' `+ W$ w, z. w3 r. E+ Y X. G
1、这些方法都可行,但不是太可靠。, c n x& {, f: n2 d6 ~( v) D
- <script language="javascript">" Q6 x. K2 f: X) o* V9 u7 B2 x
- if( top.location != self.location) top.location.href=self.location.href;
: S0 I: K p! {6 K* T, X - </script>
复制代码 或
7 G. c+ p q, r3 b- <script language="javascript">1 N% y- F) M# c, d8 c" |! `* N
- if (top.location != location) top.location.href = location.href;
/ d5 x6 s, w; U" k, k2 l; D- Y' o; o/ E - </script>
复制代码 或0 L. h e* ~; T ?: I/ C" ] A
- <script language="javascript">/ ]1 X8 A) F& w3 p
- if (top.location != self.location) {top.location=self.location;}8 n6 B9 F6 E& Z3 L
- </script>
复制代码 或
# u; s4 P6 m! d$ |5 A9 G- <script language="javascript">1 ]' s' F: O4 y. O9 R
- if (top.frames.length!=0) top.location=self.document.location;
" N V* R% `: H; v! I$ |& Z - </script>
复制代码 不可靠的原因:/ R5 C- l. t/ L4 t" I+ D
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
$ l) j `7 w, ^2 b7 {- <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>% X. l4 a: _5 K
- <script language="javascript">
' G4 f" X; e( i/ E! E; u& l( R - var location="";: {& A. j+ v# f
- var navigate="";
$ ^. Q& x! ]3 h* r1 X - frames[0].location.href="";
) l7 u" T2 T) w) H6 _$ |; F! e - </script>
复制代码 或' p4 J7 b+ R& N: x) y' W% L2 C j
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
1 `9 \0 c$ _2 J$ V. w4 G1 X$ m1 L0 S& c3 }9 {4 P
- <script type="text/javascript" charset="utf-8">
$ Q) d! N$ q7 S9 D5 P( Z( Y/ ? - 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>');
# y% o/ i' Q; R% Z: ^- V - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
& t& _' k! g& g# y0 Z' ]# MMeta标签方法( H: ~. E' U4 Z% v/ R+ a
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
* M& y5 J7 |6 y. H3 [- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
) _! a6 M# R# T2 E" A- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法* Z* I7 Y O8 v. X* `, V: x% n
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 5 J# O) x4 j# B, A
.htaccess方法
/ {7 a; s. E2 A6 q0 g+ p在网站根目录下的.htaccess文件中中加一句9 ?+ q- ^6 U7 j* S3 F6 q) y0 l) B
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 0 N+ `7 g" f2 p2 G" X
IIS方法! v5 w+ X F% |0 t1 D
在web.config文件中加- <system.webServer>, n' i1 Y# [2 A& u, }% y6 G8 Y
- ..." a0 [6 D0 L- |+ B5 ?
- <httpProtocol>! w% o3 A& i8 K2 z: q
- <customHeaders>- Z% t- y* y8 Q$ l7 r0 z% y# |
- <add name="X-Frame-Options" value="SAMEORIGIN" /> $ _/ Z+ O1 H9 M, q
- </customHeaders> # c0 ^1 U$ U. R, f# b
- </httpProtocol>
6 a D* H4 K1 i- I) u- f1 v" y - ...
4 u" @1 D; E6 R& m3 c - </system.webServer>
复制代码 6 Q+ o2 A; Z1 [2 }
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。; z5 z7 e9 A! l
4 p; r& n9 |/ I. q; _8 U3、推荐解决方法。
2 A m2 Z" r$ I/ j% I$ }( _- <script language="javascript">
* E( G- I" x: v' l9 G: U$ K( q - if(top != self){
6 J. o6 x7 n) M# o' ?0 {- y' m1 U - location.href = "http://xp6.org/iframe.html"; . R/ G" b) H" y4 x E4 Q( e
- top.location.href=self.location.href;
& P6 J& o7 n# v. i) ^" E - } 0 n8 ]. ~3 P% r' w6 S5 d
- </script>
复制代码
9 e" P4 H( D9 V4 P将上面的代码复制到需要屏蔽页面<head>里面加载。# O8 N+ n' f( Z3 U; u
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
; H( f/ | E( R5 {. R% c原理:" l: E3 `! D4 j. b2 A
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。- k2 h! f$ L% F0 c/ k' K/ |2 g7 ]! v
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
* T& n5 e* S4 G& @0 _* Z: L. P目前测试这种方法没什么问题。
7 f5 E* m5 i1 Y/ ^7 k: W9 j
0 G& Z& I2 K. ]# ?& B* o" T |
|