|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。8 y2 r S& h1 V' d& E0 {
这次讲一下如何防止自己的网页被别人iframe。* C* r6 {$ Y/ y N: \6 Y
/ S/ p: _- y- L' c1、这些方法都可行,但不是太可靠。
4 A6 [! @/ u% R' \- <script language="javascript">
4 [$ u$ Q s6 N# I# Y. i - if( top.location != self.location) top.location.href=self.location.href; R1 S# b k5 N$ n- W2 p0 T
- </script>
复制代码 或$ @' u- F1 l* }# n" W
- <script language="javascript">
! @1 D& F4 L8 R+ E3 J - if (top.location != location) top.location.href = location.href;$ P" a) Y8 p3 i, Y$ x* k
- </script>
复制代码 或8 G6 R; \$ {' }
- <script language="javascript">
& E7 b5 N* S' G" s& w - if (top.location != self.location) {top.location=self.location;}
9 @; W# l' M' m) \, T& n, J - </script>
复制代码 或/ z; d a( r* ]: x0 U! g+ z
- <script language="javascript">
1 T# o, i. Z9 x4 [ k( W/ {5 u: l, i - if (top.frames.length!=0) top.location=self.document.location;
' e) ?2 c3 Z4 C - </script>
复制代码 不可靠的原因:
2 C0 u: l5 e' m8 a( j [6 i当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。 R- J" x C5 x0 j6 e
- <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>
6 Q) i- C9 U. I7 j0 W* c - <script language="javascript">
; a9 x1 D2 d0 f7 I# P4 c - var location="";3 B$ Y0 N- t4 {6 L7 N3 E
- var navigate="";( [1 U. [; S; ^4 J
- frames[0].location.href="";
: d* i- t9 E0 P: o8 O2 m' b - </script>
复制代码 或
7 H; k( T5 H& w3 W: x- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
H9 s: H+ z( i7 \$ A( s2 G8 K4 N9 T5 T" d
- <script type="text/javascript" charset="utf-8">4 R n: h& S J
- 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>');0 T5 z7 Y! ~ H* |8 ?
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
: ?4 O( z% L2 b% tMeta标签方法+ q' V& J2 W9 b' ]! d' B+ E6 G
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法6 J. L0 M. E' \5 G: k; ?
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
4 m; D) ~$ w: h, |# Q5 R7 c- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法6 N5 F o+ A3 l8 G
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 3 O% h C$ {1 m4 c. u o
.htaccess方法
& A" d- e5 E8 b; n在网站根目录下的.htaccess文件中中加一句
! U# _+ o9 T; Z) |! e4 R- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 0 P5 @: `) K q1 n
IIS方法
! t- z; I" q5 ?. J. ]在web.config文件中加- <system.webServer>0 P# Q% P7 a$ G6 E7 I
- ...
) Z }8 ]7 O+ `3 T! U - <httpProtocol>2 ]( o$ u8 o! `' k" z4 ^- ?
- <customHeaders>, z# \3 e* r% ?7 G1 G
- <add name="X-Frame-Options" value="SAMEORIGIN" />
, Z6 l; _0 E1 O) b: _$ m5 F - </customHeaders> & J% S1 @& J& J) ]( N* J O
- </httpProtocol>
^& L3 d( g; v7 o* A6 x0 ?3 | - ...% i' K0 w" ]4 U8 i) D8 b1 I8 l6 s
- </system.webServer>
复制代码 8 a! v. Q3 a ]" n* X7 T$ P9 S
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。4 O" w$ z0 @& W+ h" B$ f& G
i- J: ?7 A7 C" W3 k& l+ e
3、推荐解决方法。7 R6 n3 D1 N1 d$ b5 L/ a0 v8 _
- <script language="javascript">
, ~) i; Q8 {* @$ E* [ - if(top != self){
3 Q8 R7 O$ o% U& _( i - location.href = "http://xp6.org/iframe.html"; 1 |5 s5 s: k2 V" G9 ?* {* V. Q
- top.location.href=self.location.href;7 j4 u" G: v2 \0 k$ R
- } % k4 R& X. Z9 g: C; i
- </script>
复制代码 ; l5 c& Q7 V7 |5 {4 x' K. t! a
将上面的代码复制到需要屏蔽页面<head>里面加载。, g! F" m- s0 k( x6 Z1 ^. |
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。: a# ~# s$ N" ~* q
原理:3 z& l' \3 \0 { A2 b+ V4 b
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# N: x' C: R8 O/ h- `3 O' h+ O第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。; D/ X5 b" u4 ^8 c% P
目前测试这种方法没什么问题。
+ j: W; l: T2 H
6 `) m3 m: c' L, m7 p' U$ f8 X |
|