|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
) g0 b2 G+ B' [! h这次讲一下如何防止自己的网页被别人iframe。
' j' ]% u& P, j% I& f; m( \+ h; C: u& v+ g1 \9 @
1、这些方法都可行,但不是太可靠。
9 N: P# e, X4 l) F3 L8 T- g0 J( K- <script language="javascript">
4 D) U! H T( f1 ?& j - if( top.location != self.location) top.location.href=self.location.href;8 s" d* I9 o* r/ ^9 v* P
- </script>
复制代码 或
4 H- b# ^- R% c6 m9 |- G- <script language="javascript">- b1 q9 \" H- R w
- if (top.location != location) top.location.href = location.href;: Z4 z9 x8 q5 N; X& I3 h
- </script>
复制代码 或 ]$ q& l4 C+ V( k& g
- <script language="javascript">0 ]& ]6 \7 d6 T2 O) z6 P* a! X
- if (top.location != self.location) {top.location=self.location;}0 }+ `* U6 P, ?7 E
- </script>
复制代码 或
0 H; N( ^& L( f' N# ^- <script language="javascript">! x5 G! F4 U+ w. h6 k( b
- if (top.frames.length!=0) top.location=self.document.location;; E+ {% g' k/ y6 f
- </script>
复制代码 不可靠的原因:' V5 r z/ F" m7 A" f
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。6 v' Z% \: B# x+ j J( F2 t
- <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- Q' A1 Z9 ]8 f) k
- <script language="javascript">
( d% B5 g/ F8 Q - var location="";
2 g$ y+ U) Q* _8 s; i2 M - var navigate="";0 j' M4 x! Q/ P# u1 B
- frames[0].location.href="";
9 E# ]2 E7 C. [# T' O9 D+ u! w - </script>
复制代码 或
8 {" [2 w( }% e* L- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
7 m) u8 c: @8 T5 S
: C% O3 ]" H. c3 D6 X/ m- <script type="text/javascript" charset="utf-8">, X+ [5 r6 y/ g8 V {
- 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>');
" J+ j# \ i& h/ R( B( [ - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。& L/ @; O! [5 }2 ^" H# ?2 J
Meta标签方法
A, y) L6 ]1 Z) m- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法% [- x7 [8 j$ w8 b% @
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法( w% F$ `5 k/ J- G( Q7 y
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
7 C; T! s# s; y" f3 [- add_header X-Frame-Options "SAMEORIGIN";
复制代码
% m" G" }* V( ^% a; B* S3 h) J.htaccess方法7 y& q: Y) v' J* \
在网站根目录下的.htaccess文件中中加一句
( r, ~. D9 U {2 F( O: w1 {- q8 N- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
# D8 @1 p- j. `, N4 P( fIIS方法) {- d p; w( M$ C4 k4 s. B
在web.config文件中加- <system.webServer>: F# B8 A: s1 _4 r8 m3 j1 X v
- ...; s4 O, }$ m0 a. k, m( C' a+ y- q1 Q y
- <httpProtocol>* H3 V2 X0 p- j, `; o8 K
- <customHeaders>
, }8 u7 |4 i5 s- b0 \ - <add name="X-Frame-Options" value="SAMEORIGIN" /> / a, I& s% r8 m, n }1 d: G
- </customHeaders>
9 ?% F- Z1 s$ F; ?3 b - </httpProtocol> / t _& a* j/ _# A4 s) c; [
- ...0 J! D' j+ |+ C1 G' u2 w$ F. V
- </system.webServer>
复制代码
$ v! x X. U: X5 ]- _之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。7 R* q) Q$ V3 I, c1 m- S2 K) {5 W* s
) I; \% n" |* C, v' Z3、推荐解决方法。
- Z" n1 U" J8 {% x- <script language="javascript"> + M6 J- J- ~, p
- if(top != self){
3 }- S% X; w% [ {) N6 {! { - location.href = "http://xp6.org/iframe.html";
0 j+ q! [! N( ^ E. Q - top.location.href=self.location.href;
9 X4 y1 v( X+ n4 j* q - } 6 ~) N: U; E$ O. ^0 Y( p' V
- </script>
复制代码 1 H0 n0 i B7 U4 P% u
将上面的代码复制到需要屏蔽页面<head>里面加载。' M& Y, [- ]" j) w
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
* K f+ v% K5 f0 |% e% M原理:7 G- A, t6 P, D" S2 ^
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# z# H5 Y2 Z) T0 M+ u7 A. o第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
e* X9 Y/ P* B2 X0 f9 Y目前测试这种方法没什么问题。
; j: F! ^9 v1 K, S; ]5 L6 J8 x. A( ?1 H7 p
|
|