|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。5 D# U' Y$ c. r9 j. x. c' c
这次讲一下如何防止自己的网页被别人iframe。
K' m8 O7 g1 X* U; e8 N+ R0 D* s1 V& A1 Y- p
1、这些方法都可行,但不是太可靠。' q8 t" ~: G6 C9 l* v. F
- <script language="javascript">
( `$ q" A5 Q/ I1 S$ c - if( top.location != self.location) top.location.href=self.location.href;% `# h" L: O: L7 ?- J$ b2 T
- </script>
复制代码 或
$ m. O) ?& Y/ w! E' V- <script language="javascript">6 S* `* e1 A5 y: g; S- Q6 g
- if (top.location != location) top.location.href = location.href;
4 z P* g" @& s4 y - </script>
复制代码 或
$ _# b) w/ ?" o6 z' v, F) V- <script language="javascript">7 l0 m$ \/ K. Q* M' H
- if (top.location != self.location) {top.location=self.location;} w; V1 O! i5 q6 D1 O) V
- </script>
复制代码 或
; M* B1 t, Q) I* L) O b9 I- <script language="javascript">
& n* d: Q0 B/ A3 n( F3 H( Z - if (top.frames.length!=0) top.location=self.document.location;
9 p5 H; d- a2 e H4 { - </script>
复制代码 不可靠的原因:8 B5 H! A) R) U1 v9 i# _5 c
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。0 r; I p# [3 o: x& b8 V4 m2 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>) ~+ d3 F! \/ z% a
- <script language="javascript"> $ t; M7 p- `- d# Z: l, J: h
- var location="";, S( U5 A$ `, `3 r/ W3 C) y
- var navigate="";/ ~8 J) _2 t- H) u0 X! p
- frames[0].location.href="";% W1 ]: c; J: ]3 _4 q" W8 N+ G
- </script>
复制代码 或/ c; u6 W6 l0 Q5 I5 J
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或, r: H/ Q! c3 l
" j9 ~1 o; N/ U- j
- <script type="text/javascript" charset="utf-8">
" O* G4 ?2 w3 |4 c K - 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>');8 k$ C9 |5 D, b6 g
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。& J: a9 u3 F- J) R
Meta标签方法
9 X/ c% j* I0 O0 k' {/ [' }- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法9 J9 V. Q R: Z2 {
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
5 `3 R: H( n0 z: R+ }; m8 w- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法" f5 [$ ^& C+ X/ j3 i
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
' V: Y: I; T# n$ E# m.htaccess方法
4 X, |, B* }! h- `在网站根目录下的.htaccess文件中中加一句
6 R1 @# H" D+ M1 J- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 5 H+ G" X* f' E. T/ R
IIS方法& @9 ?! B5 E+ v; Z
在web.config文件中加- <system.webServer>
% x# [7 ^1 G1 n9 R. G# W - ...9 D) g$ z# x- f4 c8 Y/ s% j
- <httpProtocol># h& S6 E" l( ~- h1 s' u
- <customHeaders>+ g% `' n7 K# y1 N
- <add name="X-Frame-Options" value="SAMEORIGIN" /> & G$ @7 e/ @. B" C0 \0 d
- </customHeaders> 4 ^: q1 f! Y) U9 X6 o K4 b# u
- </httpProtocol>
) ^! D# g- P$ G! M, h; f5 d# _ - ...
4 v) z. P% ?5 e4 D! a6 g( G - </system.webServer>
复制代码 5 H8 L5 Q8 L% S& W5 s
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。/ `0 k& I& J& S& m9 ^+ Z$ C
* T% W: N! j r! z% ?' |
3、推荐解决方法。( i; b: r4 J: Q. _4 |6 _
- <script language="javascript">
, r+ q5 s0 q5 Y* r' i/ V" C& ? - if(top != self){: V+ w* p5 f& W+ M! ^
- location.href = "http://xp6.org/iframe.html"; 9 |0 X8 L( y, U6 C1 t
- top.location.href=self.location.href;
$ b1 v; u0 ^1 j# _! E b - } 2 d7 V5 T6 f& O, m- G, D
- </script>
复制代码
5 l) b' l, E/ S将上面的代码复制到需要屏蔽页面<head>里面加载。, Y8 I3 G2 x# V1 s
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
" z$ e X. z- X+ O# P6 ]5 f原理:' p; h6 d2 D8 p9 ^' q" S7 I
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
$ E2 M* A) u4 C% V, j. U) T c, i第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。" l) s' c" K4 e" I9 d
目前测试这种方法没什么问题。
/ |# `$ r3 U) c Q! z
- _$ o9 E# _3 y$ W( d |
|