|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。+ Z$ N( y3 S# j$ e7 J9 _/ ?
这次讲一下如何防止自己的网页被别人iframe。3 s8 K% N; U0 @5 j. D
* J* }) l( u4 b+ u
1、这些方法都可行,但不是太可靠。& H ~. N" }/ E4 f, m. t9 P. S1 R
- <script language="javascript">% {) P0 P; ^; J6 h- t( w) v' j
- if( top.location != self.location) top.location.href=self.location.href;6 a) b8 j, U# r: F2 K* e- e, |
- </script>
复制代码 或
5 i5 G l; \; H7 C0 Z+ y- <script language="javascript">
% {% j2 n2 I7 Z7 Z2 e( ^8 K - if (top.location != location) top.location.href = location.href;/ S# }6 Z" G3 C! C' g$ {' @
- </script>
复制代码 或
; `) Y) X& W3 m- <script language="javascript">9 Z3 P+ z* F* H* K a& h! @4 L
- if (top.location != self.location) {top.location=self.location;}
4 u* b6 b) |( U2 }+ T - </script>
复制代码 或* n( p* D# R R& f. Q
- <script language="javascript">
! o* E7 E1 g% U$ t+ H& U - if (top.frames.length!=0) top.location=self.document.location;8 |' T% }4 A6 J' `" b
- </script>
复制代码 不可靠的原因:
- @3 Q4 M; g! K0 @当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
7 G" q8 r" N9 ] ]- l# p' ^( B- <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>. A+ ]4 D7 |( m3 F* `% x
- <script language="javascript"> 5 z& |' k' N& }" }
- var location="";
( C5 R2 n3 M9 U- G1 | - var navigate="";4 u2 F& F' c# n7 j! g6 J: G
- frames[0].location.href="";
6 m8 |3 B2 V# ~# W - </script>
复制代码 或! g4 T% Y0 \) L% Q9 X; w; ]4 `" [
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或' G7 r% T2 T4 X! o$ b9 B$ x8 h! j/ u
* j8 T& p# m- _* y; X8 p7 l# |2 A( _" l
- <script type="text/javascript" charset="utf-8">! V5 o- H, K* t# {
- 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>');
) k8 I9 [6 q6 E1 | - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
: b3 l6 Y! D2 B! LMeta标签方法
5 W+ W: A4 w) |: W/ H8 J, K- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法8 ~. N J) Z, A% C# E2 p" v
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
2 P' C" ]! A# C8 U6 b( q- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
$ x* `& o r+ \! B- a- add_header X-Frame-Options "SAMEORIGIN";
复制代码
1 `( @4 M2 N% I5 H.htaccess方法) Q& Y8 q F1 G( U& E1 p7 A
在网站根目录下的.htaccess文件中中加一句
+ C9 z* k8 C1 C# s" S3 g- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 * C5 O3 v3 N% C1 q: l1 B7 X
IIS方法
% c+ D2 G1 z$ D% Z, [) v# F在web.config文件中加- <system.webServer>
( x7 F4 l. ?6 C - ...- H- a/ q7 b$ w9 Y, @3 W
- <httpProtocol>3 I, u$ l! v! u9 y7 w, S$ b/ H4 k$ l4 O
- <customHeaders>
4 k0 P- Y/ J& s5 N. Q* H, H+ s1 h: }4 ~ - <add name="X-Frame-Options" value="SAMEORIGIN" />
C/ ~6 ]! }+ f! _8 j - </customHeaders> ' z3 Q! {" z( k; C; L) _
- </httpProtocol>
1 V3 V5 H! u- d8 \' e+ R - ...
5 d4 f0 z. h9 I% I" R2 Z+ q; S A0 F - </system.webServer>
复制代码 % g3 d1 e/ O/ C0 N- o" ]& T
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。6 G8 n% { r: w$ N3 x
7 c, S6 E7 u: \; {8 P$ _$ h( B
3、推荐解决方法。' _4 I6 w9 u/ ~$ P; b
- <script language="javascript">
& t o* Q) @/ r9 {# ]- d$ j* H+ z) b - if(top != self){
/ T) H$ G1 y0 q* T' w* a - location.href = "http://xp6.org/iframe.html"; 3 V3 H( d0 m# ?
- top.location.href=self.location.href;
$ c( s/ J; n4 f: ~4 ] - }
L2 B Y; b# E3 Y7 q - </script>
复制代码 / P, D9 s l) s0 z, h; H
将上面的代码复制到需要屏蔽页面<head>里面加载。6 s3 H: _( P4 p: _
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。1 z4 R$ [% [ P$ X& j! Y
原理:0 b3 \ L5 R2 [* k; R3 x
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
* s' c# {( a6 o2 ~4 V% p第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
( `8 q y0 P0 a目前测试这种方法没什么问题。6 {) j% J& Q: M } C; K' _6 o" @) o& B
9 y& x4 T% _# g) S$ Z
|
|