|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。( a! L' H0 o C& k; W5 _% l
这次讲一下如何防止自己的网页被别人iframe。
) \* S) G: ?) g* D2 C/ Y) E5 V5 O
_; m! J1 G; H9 f7 q1、这些方法都可行,但不是太可靠。1 y! q6 ^& y5 b% V" g
- <script language="javascript">
3 L7 Z. x! B) }1 l5 B4 T3 n - if( top.location != self.location) top.location.href=self.location.href;
& p3 W0 I% [6 y, Q - </script>
复制代码 或
+ w3 l' d/ z! k) P- <script language="javascript">
( J4 K* Q6 ^* t" B! F- F - if (top.location != location) top.location.href = location.href;2 I2 W2 U5 }* P* D, q3 \8 l
- </script>
复制代码 或
! v" J) M2 D5 g. O$ x g- <script language="javascript">
P# K- `* \: k. G - if (top.location != self.location) {top.location=self.location;}* c; v9 y9 ~3 u! t
- </script>
复制代码 或 T/ u. v& c6 H
- <script language="javascript">; d# F& q& d% ] Y) ^0 e
- if (top.frames.length!=0) top.location=self.document.location;
2 ~# H5 ?! S, e7 I, ~ - </script>
复制代码 不可靠的原因:! q; C; `" T. `) r/ y
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
}: Y& F) W. I$ S/ 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>
# x3 N- f" N# N5 S0 T R - <script language="javascript">
/ X$ C8 E; r) y% F V. r0 ?3 s - var location="";& N" @8 F% L3 j5 c v
- var navigate="";
g/ I. _7 @" D8 {6 Z - frames[0].location.href="";
$ \5 v9 S8 P# [6 ~- Y+ k! o - </script>
复制代码 或/ |' N9 w. D6 U
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或4 |! k3 n* Q& Y8 ]/ y% H; V. @
$ m: [" H( I+ }$ W
- <script type="text/javascript" charset="utf-8">, Q/ y( C2 R0 F2 F3 L$ Q" P
- 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>');
/ a$ h% s6 X+ {# `1 b3 F: f - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。: M$ Z! D$ c6 [0 L) w# J9 ]; A
Meta标签方法9 B. Y/ A. d3 R0 y
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法( g( S' ^3 G1 m7 u8 D9 m( k# P
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
n* t% S6 [) r0 P- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法3 O. Q. {: m, `0 |
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
! I$ {9 ]; h; H.htaccess方法
7 V2 ]/ K: H4 d; y( {) {6 Z: T在网站根目录下的.htaccess文件中中加一句
; w2 [8 a; l2 k( n. A- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
' }2 Y1 U$ [, p! `IIS方法
) }* u/ m( |' `6 b* \3 M* l在web.config文件中加- <system.webServer>
0 m; f' s1 d% d9 }4 G, o! y& x - ...% E* `' p6 C% z* V
- <httpProtocol>3 T s& C' v5 r
- <customHeaders>7 \$ p1 ?1 q: f5 J H5 w# r
- <add name="X-Frame-Options" value="SAMEORIGIN" /> ( C1 d# F7 z( }% |# W
- </customHeaders>
! f3 v( r* y8 b) Y' } - </httpProtocol> 7 }- ]) ?3 V* w6 F) |
- ...
& p9 A& {' y; H3 s - </system.webServer>
复制代码
1 o& B: R) y1 [( D4 ?& _( A之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
+ W- p$ j5 g0 @/ k% ~2 C4 x; H( f# Q; @: S+ F
3、推荐解决方法。
( a% {# N3 x9 Z- <script language="javascript"> 7 W8 r q6 {2 m. ], e& F% v
- if(top != self){
9 w. _$ u; A' j8 k8 j0 L$ n1 f7 Z - location.href = "http://xp6.org/iframe.html"; ! ?9 k7 V# w% L1 \
- top.location.href=self.location.href;
+ w: J6 |7 q2 [# x" S - }
* q. @ w" k( j$ Z' b - </script>
复制代码 9 F2 x! Z s6 Q: Z
将上面的代码复制到需要屏蔽页面<head>里面加载。
% H$ {( ~! z/ r! W; W# @制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。0 l9 l) {3 x4 l! j- w* K& L6 s S
原理:
2 F3 ^2 \- r: \3 N第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
$ G$ h, k0 a& ~9 f2 q第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
( u/ _% L+ ]6 v/ v目前测试这种方法没什么问题。) D) f& j9 S; |
$ `5 p3 e( C) V: g |
|