|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。. V8 z* s' e- f9 O' W0 s% U/ C$ i% \
这次讲一下如何防止自己的网页被别人iframe。
' t6 k4 y5 ]4 S" Q2 C# q
7 x$ w& x% @0 i& ], h1、这些方法都可行,但不是太可靠。* {6 Y" A W( G- k5 |5 a9 r* N0 b
- <script language="javascript">
! P, _5 e2 w5 [4 R, M; P4 A - if( top.location != self.location) top.location.href=self.location.href;
! X. V+ e* N" m2 w0 z - </script>
复制代码 或* e, n, [1 s; W' ]: H" M
- <script language="javascript">
8 n$ x6 J+ ~6 T6 q X - if (top.location != location) top.location.href = location.href;5 U( H) t$ E/ S4 Y2 t
- </script>
复制代码 或5 x! d- u% E) J% K
- <script language="javascript">
! n+ n: ?( q8 Z/ X/ Q: Y6 c - if (top.location != self.location) {top.location=self.location;}& `& O; H; k' u6 }+ ~. p- q6 d2 o
- </script>
复制代码 或3 d2 n% V$ H, {% G1 r
- <script language="javascript">7 Z, V( E; ^4 k0 z; V8 w
- if (top.frames.length!=0) top.location=self.document.location;! V0 B/ B/ ~& s B) C/ K
- </script>
复制代码 不可靠的原因:
$ w' o& u" q' h; |: L当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
: N8 H( K: A4 S- <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>+ v" \/ I6 f0 M. i2 ~
- <script language="javascript">
5 Y3 K, L+ L! u$ s6 w - var location="";
8 \( c% Q8 d- p6 G! ^ - var navigate="";
+ r8 M* i9 m0 X/ I/ L- v - frames[0].location.href="";# x3 \/ Q+ X+ B3 t
- </script>
复制代码 或
# d# o n9 z8 s1 B/ N. L0 j- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或0 r5 K7 y; m9 ^/ l, s
, v/ e+ u* U! A' t$ f1 M1 a- <script type="text/javascript" charset="utf-8">- U+ }7 Y4 Z: \) ^5 e% M
- 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>');8 j4 m+ m" L7 r* u8 `( Q
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。; l8 V& l8 o( ]( l; y: ]
Meta标签方法
8 U3 ^& b7 O8 ]6 S+ b# k- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法1 S5 P2 p) q6 W$ j' P( v+ J" }) l" J
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法) F9 h2 e( E0 p3 e+ l0 s
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
3 o7 {- O9 G+ T5 e- s4 B- S- add_header X-Frame-Options "SAMEORIGIN";
复制代码 9 o1 h' W5 }9 w% v/ m
.htaccess方法
( D- M$ w! `5 m/ Y在网站根目录下的.htaccess文件中中加一句
: I7 U4 y: v5 r. H+ ?3 s- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 $ M/ q, V0 @( L& J
IIS方法
6 h! h8 _0 k& V; x在web.config文件中加- <system.webServer>
% I* Z; ^* @( o9 e6 z - ...
7 Z- L- M0 U5 W) V/ _5 B9 e7 n - <httpProtocol>7 U- e! Q' O& V! g4 q( Z- k
- <customHeaders>
4 ]% Y2 K* A# o3 M$ A* Q - <add name="X-Frame-Options" value="SAMEORIGIN" />
; {6 x# l Y7 I; t7 j; V% o. H - </customHeaders> / f. a% j! ]% ?0 d6 I Q; N C
- </httpProtocol>
7 o; y6 l" [. X# T; J! t - ..., i/ w3 c) m4 J
- </system.webServer>
复制代码
! @0 N% p! a: T( P! u2 x之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
" D! R+ U% l$ e) t
0 \% t) l4 A: m. n5 j* e9 M3、推荐解决方法。; s) z5 X) x4 B
- <script language="javascript">
( y" ?3 ?; w8 U2 O) W" o! O1 u# @ - if(top != self){! F; |- d7 ~, [) K; K" R! x" d& \& D. q
- location.href = "http://xp6.org/iframe.html";
# J: a# p% e! s' z/ F$ ]% H Z - top.location.href=self.location.href;5 M+ v( @2 f2 o, K) j. W2 T1 B
- }
" s4 e) o# m6 L. r- B$ v, H - </script>
复制代码 5 I% f. O1 t& u0 ~1 [
将上面的代码复制到需要屏蔽页面<head>里面加载。 `% m8 y. `, J7 T: p: ?! R" h
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
, S/ L3 e6 o% q2 ~. s1 u9 n8 a* O原理:
2 y" j; F5 y& f: c. n! W. \第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
) `9 g9 F }" |; c( f C+ s [$ w第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。. t$ o% h F; H y" r
目前测试这种方法没什么问题。7 ? q( Y$ w6 M; l M
! {9 h3 u+ \" e* U
|
|