|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。- S2 K* J+ g2 R) f5 T P6 U
这次讲一下如何防止自己的网页被别人iframe。
B9 U# c5 F; B/ k. g/ b3 O( t$ [; E
1、这些方法都可行,但不是太可靠。
' \9 N1 A2 C3 Z9 N! z- <script language="javascript">( X4 G- u9 U- G# y0 c
- if( top.location != self.location) top.location.href=self.location.href;
, m( n" C0 K0 t& E - </script>
复制代码 或
) q9 P( N3 W$ ~5 N+ A/ W- <script language="javascript">
2 M9 \! _' ]/ I! Y - if (top.location != location) top.location.href = location.href;' t7 z$ F4 T' E+ c' p& C# e: u
- </script>
复制代码 或# ]4 J4 a5 p0 y3 d) {
- <script language="javascript">3 O% t* C5 X5 B1 {- v
- if (top.location != self.location) {top.location=self.location;}
* y# m, K y. m" w* n - </script>
复制代码 或0 \7 ^8 N: p; r) d# E
- <script language="javascript"># ]& X7 h% c @$ e9 }" b
- if (top.frames.length!=0) top.location=self.document.location;
c ^+ E' B3 E Y1 y, @ - </script>
复制代码 不可靠的原因:: ^4 J( h: b. B ]/ B! K
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
3 J' c4 N) X( d- j; @, U- <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>. v6 s: W- X) d' K2 _
- <script language="javascript">
5 _' S! I8 k! ?5 Z( J$ } - var location="";, W5 j: C) x/ n
- var navigate="";1 W4 m1 o2 P M2 Y) R5 _( w
- frames[0].location.href="";
8 d0 W/ l; @+ B3 ?. O( T - </script>
复制代码 或3 q# Z+ z8 m. v- [ g* L
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
' j1 d% N0 ?0 h8 }, N% z0 g/ c+ H4 o. E* w7 e/ x
- <script type="text/javascript" charset="utf-8">& L- |; h' ~- D8 x# r9 h
- 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>');
7 h. A, z7 n; S: K - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。; T1 `0 D/ Q4 F0 F# [3 x: |4 {
Meta标签方法. S4 h/ F: y: D& H% j3 Q
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
( H. M6 T6 M* x, G/ U- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
6 b2 R0 Y: @, H a- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法6 `6 t' g9 d8 y" ^- z" Z
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
$ ?7 Y0 a5 R1 n5 @3 h8 {, Q: P* Y! M( G' G.htaccess方法& W3 A$ q0 J" H' ^9 A& ]& ~
在网站根目录下的.htaccess文件中中加一句7 O2 i+ w3 y; \- E
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 4 l$ Y6 r3 B, ^
IIS方法
8 o5 W: p: H& ^) m$ ]1 a1 N9 l在web.config文件中加- <system.webServer>1 G& T. B# r! g! H% F! W% w
- ...
% m) C* a0 T5 [' d+ |0 x - <httpProtocol>
$ j/ v7 K5 C9 e3 {% s/ b% H - <customHeaders>9 e c' a1 T; W" ~: S
- <add name="X-Frame-Options" value="SAMEORIGIN" />
) a% _; \$ Y' b8 z6 R - </customHeaders> % J: Z0 y; t; L2 G
- </httpProtocol>
& X' j& z1 f% H; I X# `2 e - ...4 D. j# e/ y" f( p- E! u6 |
- </system.webServer>
复制代码
- z2 v! X6 W' b' _* ?; L- G- k之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。; N% M3 D' Z; x2 K; c' \+ o
' h* K2 V1 T1 d3 b/ r9 a* R3、推荐解决方法。8 i8 ?& A# r' y
- <script language="javascript">
9 A" h" M C. b( m+ p* m9 X" K3 C0 ]$ {0 h - if(top != self){
7 D6 {( p8 f! g6 G" E3 \ - location.href = "http://xp6.org/iframe.html";
9 @" x4 Z" q1 C% _: h8 I - top.location.href=self.location.href;. @3 o1 s; |. q2 i) ]
- } 8 W+ J: A2 u' d" e9 U8 I
- </script>
复制代码
+ a. e7 ], p1 }将上面的代码复制到需要屏蔽页面<head>里面加载。
3 b$ r. p" ^# i$ @' U( W制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。, j! O: F3 W+ R y7 i8 b, h
原理:
4 M4 m2 N& V) V% ~% _2 s, l第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
* |" E& _6 M$ k2 f# |; K# d第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。0 Z3 r, p" m3 z
目前测试这种方法没什么问题。' n+ \4 @1 a7 e# Q
0 c5 E8 A# U0 W* ]
|
|