|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。$ r% j( C2 |* f/ M- F& y2 @# z) ~
这次讲一下如何防止自己的网页被别人iframe。4 P' R* S8 a+ X6 N3 R
$ s' I) ?9 P) |* i H1、这些方法都可行,但不是太可靠。
) t+ ?; g" K% \- <script language="javascript">& l% `4 D0 C& U5 L* P, q
- if( top.location != self.location) top.location.href=self.location.href;$ ~+ z4 J3 u4 {; Y! D
- </script>
复制代码 或8 C$ ~/ D- V+ g6 [: W$ H" R
- <script language="javascript">
2 h- T, U0 G n* ?# `: E) T! D - if (top.location != location) top.location.href = location.href;
5 c8 ?0 ]6 n, R8 P" J1 d/ e3 Z1 | - </script>
复制代码 或
! u* Y# }" _7 f2 }- <script language="javascript">- w8 j8 J$ T' L$ j/ m
- if (top.location != self.location) {top.location=self.location;}- I4 `/ q9 a8 {* C1 P
- </script>
复制代码 或
, R+ G5 M* N: _$ p/ p- <script language="javascript">5 R& i6 b& T1 T2 C0 K. b4 `
- if (top.frames.length!=0) top.location=self.document.location; a! j1 I' [% X+ h& U
- </script>
复制代码 不可靠的原因:
6 F2 {$ k4 Z8 G5 h1 t; {$ N当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。% d3 i$ n6 }7 Z; _: Q
- <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>
& Y& u6 x( o: |- p0 M. [ - <script language="javascript">
" B7 X, E9 c7 _& L2 ^% c - var location="";$ m7 A! {& T L$ S+ `+ }! Q' j% d
- var navigate="";
/ ?/ F+ `% @1 b4 M. h - frames[0].location.href=""; w3 C5 h7 i8 o
- </script>
复制代码 或
7 q+ v7 S8 X, x5 Q/ L% V( O) F- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或% l! a* E4 k4 p n7 Y! q1 c
5 d0 v) e/ v1 s# X. L" p- P2 S- <script type="text/javascript" charset="utf-8">
9 U8 g, _5 ], y# q7 M* z8 K6 @ - 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>');
: m# I4 r5 \1 K0 V - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
$ C/ i5 k( g; h% g7 m/ }Meta标签方法1 x G4 `6 h4 c! }9 u% N
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法/ D$ P( s/ s: i5 f
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法- O" G' v$ a5 f+ k& s, L- g
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
" ^; x$ b. }9 N9 P; D ?- add_header X-Frame-Options "SAMEORIGIN";
复制代码
& [ y/ ^, Z$ @- `$ f+ U3 \.htaccess方法: e' i& q B* ]8 \
在网站根目录下的.htaccess文件中中加一句
; ~3 s( B9 _2 O/ D- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 7 M# {" k6 a8 e, K
IIS方法
$ s1 ~" B5 D( |8 @9 e% |) c9 Q在web.config文件中加- <system.webServer>& F* a/ ~( o) q; M9 n4 a
- ...
. G2 F$ T" ~+ D) X' n3 H. d4 ` - <httpProtocol>" O+ j8 {* U k& f' H2 b* k, O8 z
- <customHeaders>& m6 Z; y% F4 o3 |& i9 {5 f
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 5 @; I h/ T6 r3 |, m
- </customHeaders> ! F2 s4 }( t9 ]+ a9 {' a- z1 L! q
- </httpProtocol> 9 i$ _( g- F6 K6 l% w) C
- ...
1 F) a: i5 s6 b$ b% V: m+ P - </system.webServer>
复制代码 / o& ]! x$ F0 T% `1 _4 a5 Q" G
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。. @0 p) O/ N% i
& c# m5 c: e7 Z% X( L* ^
3、推荐解决方法。+ R* I3 A% V$ \/ M
- <script language="javascript">
, y4 J& C- r0 o4 M - if(top != self){
- c" ^& a0 v$ p( ?1 ^ - location.href = "http://xp6.org/iframe.html";
0 \' Z6 N+ a% A7 y) w - top.location.href=self.location.href;
2 e) N/ D6 O1 g1 T - } 3 w3 f+ M2 X+ K- z6 S# s
- </script>
复制代码 3 X" y* K e+ q" W
将上面的代码复制到需要屏蔽页面<head>里面加载。
7 O: c/ L1 y' D3 u制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
( W8 f/ z2 q) E* O/ ^" K. r+ r原理:. E: {: q: M7 R" x! F/ U
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。6 s; C/ U1 q$ t" p( L: o
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
+ z3 {7 z, L$ {目前测试这种方法没什么问题。
. \+ k; {) ^8 Y3 G5 |- u8 p% W3 O+ O( x% V# D/ Q3 Q! H8 ~! s2 |, E
|
|