|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。8 J- J: X5 m; r# ?& a
这次讲一下如何防止自己的网页被别人iframe。
/ ^3 E( F8 D3 I* Q# C! y. |0 @/ ^4 X* `; b
1、这些方法都可行,但不是太可靠。
! E" v" z" [7 v# v( D% E1 C- <script language="javascript">
, }* v- s- ]# O2 l - if( top.location != self.location) top.location.href=self.location.href;
4 g/ ]+ x: e& I$ F8 P - </script>
复制代码 或
; y. O! N4 P: W% l- <script language="javascript">3 J# {1 v0 m* v) u& d9 \+ r
- if (top.location != location) top.location.href = location.href;$ U8 B0 F- I3 T6 F s) a
- </script>
复制代码 或4 p* b1 T2 Q% b+ f0 b4 n
- <script language="javascript">
( V4 Z/ v1 c4 I9 p - if (top.location != self.location) {top.location=self.location;}# m9 ~6 B o P
- </script>
复制代码 或
% ?9 Q& g' z. ?# Z; O- <script language="javascript">8 N4 q ]4 T3 l
- if (top.frames.length!=0) top.location=self.document.location;
& z: F" E) ~8 t/ `0 _ - </script>
复制代码 不可靠的原因:
+ I1 e& i" x' Z {5 @0 L$ [当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
9 l' q* B6 Y. z% G% e- <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>+ @9 f \4 g/ [! q( a' O
- <script language="javascript">
5 G/ ?- \) M6 U5 q! ` - var location="";
9 t6 |; _$ R% `: F - var navigate="";2 y; _. Q5 P$ j3 [. ^. F
- frames[0].location.href="";0 M+ ^/ s5 x$ ]: A3 G
- </script>
复制代码 或' b! G9 C$ L7 l
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或! V; K# T6 O$ B; g! W0 m v
8 R1 f& @* U% z! f5 k
- <script type="text/javascript" charset="utf-8">
$ K5 L2 u. T6 H* l- _ - 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>');
( z0 O# G5 ^5 C1 v' I4 T4 I - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
7 g& @' ~) ]- rMeta标签方法
4 O2 v" e/ y' \9 O# g- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法2 H! V. S) E; @
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法/ x- j, d' E: _$ u
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
" s" v- J0 S: P5 `+ o- add_header X-Frame-Options "SAMEORIGIN";
复制代码 # K7 J/ g5 ^, O+ Y C- ?" m
.htaccess方法) [( o: V& A- e; X
在网站根目录下的.htaccess文件中中加一句
+ T2 @ \; Y+ J, e; M4 ~; C. a$ Q- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
' Q3 D: P. r. }5 wIIS方法
* c, E7 A$ j/ g0 E6 |4 E: D8 L9 G, v在web.config文件中加- <system.webServer>
2 U1 v: W" [' d6 {6 M3 Z; j - ...* e) {! l X: S/ M% N$ @
- <httpProtocol>
4 ^" t/ c& y' h- ]( d0 T* Z5 N4 h' ^' [/ @ - <customHeaders>& S# `6 a. u% G* z
- <add name="X-Frame-Options" value="SAMEORIGIN" /> $ z1 O2 S+ L$ Y* a
- </customHeaders> ]! h( L/ x# m5 e) }
- </httpProtocol>
) _# p }) _! M1 v$ r5 e6 @0 ] - ...
4 G$ P8 l- k# l" Q; L& ~1 z9 z - </system.webServer>
复制代码 & a- I% p [5 u* D4 R4 k
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
' K: _+ Q3 A, p7 J* W0 w! G- S V) E5 t* h6 R# g# S6 G1 T: E
3、推荐解决方法。0 f* o6 u7 I1 H* C) N
- <script language="javascript">
# D. f8 \+ K& K1 ]! y, Z - if(top != self){
/ Y% @% n' V+ C% G7 n3 o - location.href = "http://xp6.org/iframe.html";
+ `% K. H2 r; Q, B/ o - top.location.href=self.location.href;2 z4 e% U* t: [4 B# G1 ?
- }
; V( p$ O/ I2 C. N - </script>
复制代码
( i" d2 w9 G) J4 d! ~将上面的代码复制到需要屏蔽页面<head>里面加载。! p* E* S$ R# f3 N# d/ M# }7 M( U' S
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
7 N l7 F. q6 k! \6 x# m原理:
K1 E" V" a& p$ s6 z; R3 [ {- z. ]第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
, w1 _- W; U3 g* f# z* V第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
/ |$ Y6 m' h1 n& s2 _; c目前测试这种方法没什么问题。4 s' E& X: y4 e
* x* p' w3 [# D1 B1 Q" e8 A) t |
|