|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
. x, r$ N9 G+ A( b4 N1 b* r* f这次讲一下如何防止自己的网页被别人iframe。
) V, ^6 S, K$ @$ ~% C. t
6 R5 L# E- P4 Q7 E) o0 G1、这些方法都可行,但不是太可靠。
% V" z. ?& q/ G" \) B _0 F- <script language="javascript">
1 m0 \2 h" H2 g. L5 g+ s, t - if( top.location != self.location) top.location.href=self.location.href;
) T$ \1 c% r" N$ }! p; S - </script>
复制代码 或
. ?: ]2 @7 f8 H5 }& {! a- <script language="javascript">! ~( o: N7 C: ~- P* f% M& p# R
- if (top.location != location) top.location.href = location.href;
3 ^" e9 ?. d7 w4 z% W( } - </script>
复制代码 或5 J! u, T Z. n+ l5 J% \- B- ]/ d7 C
- <script language="javascript">3 ?8 r% {$ u. }7 `( Q) z
- if (top.location != self.location) {top.location=self.location;}
4 ], u: A! @ w4 R/ b - </script>
复制代码 或9 g: g( L. {# f7 ?* w
- <script language="javascript"> d$ A( l7 B$ Y( ?
- if (top.frames.length!=0) top.location=self.document.location;4 P8 |- O5 u+ C: A# ?0 j* O
- </script>
复制代码 不可靠的原因:# J/ k3 ~1 q9 g. D0 F
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。# Y9 m( x7 p9 n; J/ z6 ^0 H
- <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>3 g- p, T y2 `/ o* D
- <script language="javascript"> & d9 k0 Y. B; r3 x, n
- var location="";' s/ ]% T5 m8 d) V6 v2 d3 L5 N
- var navigate="";
3 u" z" g$ E' m- L+ E( x - frames[0].location.href="";
% n! \. z/ l; q$ S7 f) I7 r. W% p O - </script>
复制代码 或
, @. |% p, t2 ~# q" C% [, J3 f# W/ }- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或6 F% |/ O; u G" L
. w; `# ^( D- L3 A+ d
- <script type="text/javascript" charset="utf-8">* [- _2 E) K' H- n5 l
- 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>');
- l4 ]# r. W Z: i m+ x! A - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。4 H2 R& D* j0 ]. e
Meta标签方法
. n7 o( T$ z1 O1 f! t" M- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法 `1 A- w6 T% i! \
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
+ Z4 h* F4 h& S3 f3 s- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
' S: t! g+ l& E3 y# e# h- add_header X-Frame-Options "SAMEORIGIN";
复制代码 : }' s0 V6 ^' h4 D. `
.htaccess方法0 F3 n$ _4 n o
在网站根目录下的.htaccess文件中中加一句
( ]* J" O$ T6 }- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 : S0 r* o. ~0 k- N
IIS方法
$ |6 ^0 S7 h5 F2 i- r. K在web.config文件中加- <system.webServer>
# n7 { u, B& G- h - ...
% l8 q9 K" [# F/ l6 f9 o9 k - <httpProtocol>
! s1 V% X" n1 t$ {2 a - <customHeaders>
5 }( }" w3 n1 v! r - <add name="X-Frame-Options" value="SAMEORIGIN" /> - d. `$ B7 U' i4 \8 U7 g8 T
- </customHeaders>
1 h* v9 g8 T3 B) r - </httpProtocol>
5 K& q; Z `# |, f - ...
- j9 Q# F8 c" {2 e; x - </system.webServer>
复制代码 , g1 p1 I7 }" T4 t) q+ N) ~
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
# Y" ~$ J% w2 y& I) Q+ h) P
B4 `# g7 g j! k A- z: U3、推荐解决方法。
0 g- q# X' `% l/ m- <script language="javascript"> " x4 e1 y1 L* N6 S
- if(top != self){5 F& Y% r4 u- h8 @2 ?0 D, x
- location.href = "http://xp6.org/iframe.html"; / T3 {3 w# N8 }. b; L8 u* ]$ d
- top.location.href=self.location.href;
% K7 N& D# z/ l) R - }
$ z0 {% L& j/ q3 @* S' r - </script>
复制代码
: M6 Z$ u1 c9 N! S将上面的代码复制到需要屏蔽页面<head>里面加载。, i) |1 N( m2 g. F$ x
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
& y7 r. E2 P' R% L W原理: a' S6 n$ Z1 Y( b# Z$ o
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
3 \ u4 c2 G4 U: |第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。$ M% ~- R. }& H% d3 |
目前测试这种方法没什么问题。
* B, `8 J! [. c; t& |0 k
2 i5 Z$ s7 G9 Z4 ` |
|