|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
) o- M) D/ X9 U* r( L& y9 g这次讲一下如何防止自己的网页被别人iframe。) }: t; K4 _9 I; i1 L
* B5 M6 ~8 c9 O2 e( v: I: G& T1、这些方法都可行,但不是太可靠。
4 K# \4 x/ \" v) b; N8 O! {" A' W: Z- <script language="javascript">
) b ]; ?4 W4 m - if( top.location != self.location) top.location.href=self.location.href;3 e$ A: L9 C* o! K0 y
- </script>
复制代码 或' t0 x8 u& X6 i6 }
- <script language="javascript">" O/ B( V2 i4 Q% r6 [5 q
- if (top.location != location) top.location.href = location.href;5 @5 B* ~+ S: Q, I$ P
- </script>
复制代码 或+ [7 c. q3 {) i! @
- <script language="javascript">
* f2 j1 v. X5 `+ c - if (top.location != self.location) {top.location=self.location;}
' B8 k3 H" ]0 d& | - </script>
复制代码 或: Z7 @2 L$ m4 g) h) F# u& ?- ^
- <script language="javascript">! Y; O. V) [! f4 G" W
- if (top.frames.length!=0) top.location=self.document.location;
0 H) t5 J4 i" D& i. J - </script>
复制代码 不可靠的原因:: W! i, N+ @9 ^6 y( f
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。3 R2 u! m0 R5 z& [3 l8 h! d' {
- <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>. g0 {: d1 \( g: ?, B) P9 [! s
- <script language="javascript">
5 n0 B% n: G1 i. X- h - var location="";
! y1 b) r- R- W% g% Y: i+ l - var navigate="";
. B1 j& j! C3 M8 ]% H9 u% U' L" ` - frames[0].location.href="";
! U. c% M2 T: u/ n5 I0 ^4 m - </script>
复制代码 或. j" y- I3 {* H8 k
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
P; F# \. C; w" l
% y/ W# V; r! E7 a9 O- <script type="text/javascript" charset="utf-8">
4 g. N5 ~6 I; E9 C' v3 @ - 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>');/ t5 Q& Z/ k; |: G, O
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
3 D- p& c) B! Y0 XMeta标签方法
% l/ F- [$ x. @' E8 {+ |- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法: I2 Z/ M) E) Z f
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
1 c* q4 x' \/ P, m/ R- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法9 ]3 }! Q: N; d
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 9 }% L! o) D4 l) {# D
.htaccess方法
+ r3 m" \& ?4 o& q/ P: k在网站根目录下的.htaccess文件中中加一句
+ r+ {1 J2 V1 y% i6 @; i4 n F- e- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
2 d( j& D. T* v! e% }1 a8 P! @IIS方法
6 A5 P; i9 D6 n# D) i在web.config文件中加- <system.webServer>
5 u5 g8 F5 c' T [- U - ...+ s- ]8 w' I3 a0 _; r) b( g9 Q
- <httpProtocol>
0 u5 G8 i' [' d9 n - <customHeaders>0 j2 J+ Z" g% s4 u5 S2 n
- <add name="X-Frame-Options" value="SAMEORIGIN" /> ( l- x- E+ J. p+ Z6 T( [" W5 |
- </customHeaders> " E/ l' ^7 ?5 }8 T, [
- </httpProtocol> * Z. e, z0 A# @* z6 G2 V
- ...$ N# g% l( j$ a7 A8 x+ E- E) {( O0 D
- </system.webServer>
复制代码
5 j$ L' j* b3 |3 J' S之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
% v* v% [; R. c% g3 E5 p0 \0 G4 j8 T0 u7 F
3、推荐解决方法。% n! t) i9 _% _! l/ K, h3 j. G- F
- <script language="javascript">
1 l: M. S4 u9 [, K$ P+ T - if(top != self){( z7 s7 B! V2 j z' z& y
- location.href = "http://xp6.org/iframe.html";
9 x6 P3 d2 l% E8 w9 x$ G - top.location.href=self.location.href;9 _3 o" G9 v0 ?/ C3 ~# [8 L
- } Y: j/ c5 U3 q$ Q
- </script>
复制代码
' r3 r1 R2 g$ k+ C# g6 D将上面的代码复制到需要屏蔽页面<head>里面加载。# O, _5 x6 [9 q" K7 c% H! P
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。' x2 L. x" w( {$ a
原理:' e/ ^" t- I) l* H
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
+ i$ {" H5 K$ U3 L4 |) f1 ^第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。" L- h0 ]/ K$ L: ~9 \8 n
目前测试这种方法没什么问题。9 N _7 K2 l" ^' [/ j1 h0 Y
: H4 ^! _2 ]: y# i- u. E1 L
|
|