|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
$ Z8 Q _* B, ~4 c' v/ F! J这次讲一下如何防止自己的网页被别人iframe。$ V6 I+ d, I' A4 p1 a" I
5 f: q. o* i. [& N% Y1、这些方法都可行,但不是太可靠。
) t) t. d8 e! ~; z3 ]7 l- x \: C- <script language="javascript">
1 e5 E% V3 A' T& x% J1 j - if( top.location != self.location) top.location.href=self.location.href;
/ I) F3 E: r0 w* t' K - </script>
复制代码 或) ~7 o( o8 }5 G I) Q; a
- <script language="javascript">1 F/ U9 { M- v9 q/ Q$ ?& B, a
- if (top.location != location) top.location.href = location.href;
. W9 P) g3 @$ m3 V( e& t' a+ {: \( } - </script>
复制代码 或2 s6 C8 o9 T+ f/ {
- <script language="javascript">
$ c- g8 {' l, M0 E9 f - if (top.location != self.location) {top.location=self.location;}
3 }1 G% x( |2 A' O! _( ^ - </script>
复制代码 或
8 p. N# S% K# S; R- <script language="javascript">2 N1 L* [( P& P: F5 L) L) m* v
- if (top.frames.length!=0) top.location=self.document.location;
* n1 j* l+ N4 }1 J W! t. I! Q0 z# { - </script>
复制代码 不可靠的原因:
9 w! S2 \$ E: W& Q: R) a: v, @当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。1 P6 c( U9 B2 n/ Y
- <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>. Y. r2 w9 e$ d( |$ B8 a- F# k
- <script language="javascript"> f" c K* l& |7 I. z
- var location="";
9 M5 R" N) x2 J9 \' | - var navigate="";5 s* |% H! J0 L. H6 F1 P. i# ]
- frames[0].location.href="";$ S- J$ G3 Z: j( s! ]( M! C
- </script>
复制代码 或
( u% W g5 O8 T5 |( N! O8 }% t- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
( d4 C* w& n" ^7 V# \2 n7 y5 h3 f9 R/ H1 A+ ^. m& w' p5 R! a; K9 h
- <script type="text/javascript" charset="utf-8">5 l( |# x- a. L) ?! S; c
- 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>');
: e; p, F3 v0 l y# P3 T" S - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
|' b+ @: W" }0 sMeta标签方法 x, W% f4 m1 L6 D( o8 A H1 X
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法1 g2 z) C: z% c0 n! A
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法 B# Q3 v( a# J- U' j5 @
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法; Y/ k+ U% X/ b' v$ k% z0 S6 Y
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
9 U6 G# y7 W$ F/ _.htaccess方法
C. ^2 a* T$ B, U# u0 d在网站根目录下的.htaccess文件中中加一句
1 Q8 Z+ M0 m8 D0 O8 |) E( l- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ) B7 V1 [: E: E, y9 P2 z7 F
IIS方法
2 G0 K4 W1 \/ r0 W在web.config文件中加- <system.webServer>: X/ x( F& j$ q, Q: }, x, D
- ...
' ]% X/ R- _+ x* O1 w0 C& d - <httpProtocol>
, T+ D% N/ o8 O' V1 k9 a - <customHeaders>
8 F9 r" f5 }& |$ g; c% o/ C- D - <add name="X-Frame-Options" value="SAMEORIGIN" />
8 G- X' w2 l: _5 K" B# N - </customHeaders> 5 @2 c: d. [$ W; w+ W
- </httpProtocol>
1 D* N' y) ?$ Z4 x$ O6 J, W& w - ...( Z- o7 o/ `' c
- </system.webServer>
复制代码 ( Y; x9 K* {( V" X$ g1 X4 e
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
( m* p; ^/ Y6 ^0 t# w& R
3 a/ h8 x: x4 A% y) L" w3 B3、推荐解决方法。0 x5 T7 U* S% j: K9 r4 v+ |* o
- <script language="javascript">
2 P0 Q8 C* Q c2 V. Y - if(top != self){ z7 f& o8 Q. n0 p+ j
- location.href = "http://xp6.org/iframe.html";
" n5 D# H' p: n6 {5 n - top.location.href=self.location.href;% z, n' J( | A- {( g
- }
$ X8 |; j* E9 Y* ^( L3 m+ i - </script>
复制代码
/ B* t, ^1 X' h7 \将上面的代码复制到需要屏蔽页面<head>里面加载。
' I1 q0 K2 X" x. @制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
) t p) P2 r# L1 F8 y/ T7 j* p$ V9 C原理:3 O" C4 |- {4 S8 F
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
- Q! C4 [: P3 F1 r8 \0 @' a第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
% ^# [5 g# M; W0 e5 J目前测试这种方法没什么问题。8 i' I3 @% `# v, d
# K, b6 m: X3 Z( ^! D4 |
|
|