|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
& F) W( d& r# y! C+ S' U; q7 k这次讲一下如何防止自己的网页被别人iframe。
: V! W0 `7 b, ^& a6 X0 P5 `4 | b9 O* P7 C( }" D, G- e) a
1、这些方法都可行,但不是太可靠。
; k9 B/ _2 F1 f4 g" }5 K8 h% }) Z5 E- z- <script language="javascript">
( h" }+ v" V/ B+ M1 d3 v' u - if( top.location != self.location) top.location.href=self.location.href;
( }; g! @, T1 _6 p - </script>
复制代码 或" ]' l, p+ E8 e" l U. Z
- <script language="javascript">
* C- }1 G) Z b2 v - if (top.location != location) top.location.href = location.href;8 |8 h& d! X! G+ P) P
- </script>
复制代码 或
1 l7 `/ s5 J: L' H2 H0 Z( P ~- <script language="javascript">
# r8 L# f' e* L+ H4 X! x, A1 F - if (top.location != self.location) {top.location=self.location;}% A/ a) C3 d. N- ^
- </script>
复制代码 或8 T4 a1 b: ~4 g+ d! l, t+ {
- <script language="javascript">
1 L# A6 L. u* ? - if (top.frames.length!=0) top.location=self.document.location;. y# T9 } Q8 F# h) n% j) r2 s
- </script>
复制代码 不可靠的原因:6 G# I9 t& R7 n2 B
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
6 [% H4 r0 p4 V6 V3 {3 U7 m: X. ~- <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>
1 G7 e3 V" n4 r - <script language="javascript"> * T# b9 G$ t& `2 k ~2 s* w
- var location="";4 p9 j, l( v% W; [6 J6 @3 f
- var navigate="";! E) _* s) z/ @0 N" V) v/ R
- frames[0].location.href="";
! R! ~7 o# y; ]5 N - </script>
复制代码 或6 ?+ P u! @! d# |2 Y3 S8 X) s: l5 }
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或- S: X% W% d5 H
1 W2 e# W# \# e) g( c5 W
- <script type="text/javascript" charset="utf-8">
5 T a/ Z4 R, Z' c: 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>');3 _+ i9 |' Q- E6 F. p9 B+ \
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
) E3 d3 t/ P, x9 LMeta标签方法8 y! S9 W2 K% h" A" T6 Z4 k6 C
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法* _; D" c! ]8 S3 j7 Y7 L8 ?% v6 {; l
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
) y8 O+ @; Y( P2 k% U* `8 @7 w2 v- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法' P. K, }( F8 O8 k- r' L
复制代码
9 i- K) `4 n1 u, j6 }6 d0 K9 Y.htaccess方法# K1 {) ^3 R: O# X* x- `
在网站根目录下的.htaccess文件中中加一句+ n. K# q+ b/ l3 {5 I
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
! q4 _2 p# `; l! d7 bIIS方法: g5 R# m+ {7 s% W* l- Z
在web.config文件中加- <system.webServer>
1 }. B" m7 x3 M - ...
~9 z3 E8 t6 L; G - <httpProtocol>. P. c6 ?5 p$ U; q/ @
- <customHeaders>. X# F9 z, x9 f6 @+ c
- <add name="X-Frame-Options" value="SAMEORIGIN" />
; [4 B2 L5 w( v) A - </customHeaders> * a% {0 W+ c1 [1 ?3 N
- </httpProtocol> 5 R; I. a3 y/ V9 n
- ...
( r$ I x( i! I0 Y - </system.webServer>
复制代码 3 A7 J5 c' D: J& v! E7 W% ~3 Z
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
. e7 W( k. @9 U) W4 e
5 Y' g" @5 d% i" M3、推荐解决方法。: \4 w) Z d% p
- <script language="javascript"> / r1 d7 i4 R& N7 n
- if(top != self){& W! l, \' @" X' u# s% x! I `0 A" g
- location.href = "http://xp6.org/iframe.html"; 7 E3 ^4 u. J- k/ Y/ S
- top.location.href=self.location.href;9 z; e0 L. [3 [% F
- }
; C. r; r- i) i" O! ] - </script>
复制代码 2 y1 H; s0 I# U- [+ J( D4 v0 A9 |
将上面的代码复制到需要屏蔽页面<head>里面加载。: s4 v9 x$ D% v. q. r: j) e
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。, F& [( ^8 f( U1 c$ B% l& w }
原理:
* ~# W1 V4 m$ b y第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
+ k8 N* k7 t7 u第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
3 g' ]* y& {! u; M e( t1 b目前测试这种方法没什么问题。2 z/ u4 T. s0 `9 L; i' X4 N! j
0 d9 ~* N' X; M$ z& b! k |
|