|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。+ b: F, x' p. \3 `& r7 w4 N
这次讲一下如何防止自己的网页被别人iframe。
2 N h) V3 F1 J; z# g% j
) X9 P. V O" Q6 P9 ]1、这些方法都可行,但不是太可靠。
& }+ `) b. P# r& `- <script language="javascript">0 ` w1 w5 G* K- \
- if( top.location != self.location) top.location.href=self.location.href;9 B6 Y. c, x/ e3 j$ v
- </script>
复制代码 或
# K2 O8 u8 V6 C- <script language="javascript">
9 ~6 c5 D* f, @% `! S1 L& V9 x - if (top.location != location) top.location.href = location.href;8 \+ Q; O6 H! X, J# z' s
- </script>
复制代码 或) z+ q: x2 ?2 ^/ Z* [& u* H) e! G
- <script language="javascript">% a) z& w8 i3 j9 y' P
- if (top.location != self.location) {top.location=self.location;}- u* j3 H" n9 |
- </script>
复制代码 或# a; \* G$ H7 o. ]2 f- T2 M# b& ^
- <script language="javascript">: c* i2 B d8 @9 N" E
- if (top.frames.length!=0) top.location=self.document.location;- H6 v/ s. k9 D
- </script>
复制代码 不可靠的原因:5 f/ g) K) n! r+ `/ ]# a
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。$ _* Z1 `8 R y( Z8 w! G/ \. T9 p6 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>
# H& o$ j/ f3 B0 [ - <script language="javascript">
! F/ d2 j- q) s& L6 e - var location="";
0 u; a- w3 Z/ n$ v - var navigate=""; o4 [8 V& l/ A. l" G% } L" c+ T
- frames[0].location.href="";# y9 N1 U& @" g# o4 s
- </script>
复制代码 或
) f9 ], E& R9 _$ o6 g' Q- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或$ s* R( b7 R- {9 i
' [6 q. c7 c# A+ d# y# s7 g
- <script type="text/javascript" charset="utf-8">+ S/ n2 S" x8 }& T& h+ r
- 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>');
" o. a6 \2 n& W& |9 l - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。7 N$ m3 d/ |- L5 B; v. s2 ?1 t9 f
Meta标签方法3 y( ^& O3 e9 V1 X1 t9 ]- ?1 E
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
% W5 Z) u4 e! B/ ] R" f9 g/ P复制代码 Apache主机方法
4 L9 o. L7 e: N y/ c- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法' D! X. B7 u/ {
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
! Y0 }; i- n& [1 P* y8 p.htaccess方法
% D% D5 y; A, q( L% _' _在网站根目录下的.htaccess文件中中加一句
- }/ d/ v) y+ g R3 c3 [8 g! J% P1 w- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 / ~3 V' m3 e' c/ L/ c
IIS方法
7 O6 x5 c$ h& {( L [8 Z2 z, o5 K在web.config文件中加- <system.webServer>2 O7 p$ n5 K e; i- s
- ...
/ @/ i2 [. s% N0 l! h - <httpProtocol>
8 f1 s; O0 h1 s$ h7 }& |* w* G - <customHeaders>9 y. k" o9 J9 _, V& O3 X
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 3 f" u& C4 s+ f( z. ^8 [( A' l
- </customHeaders>
! i; E6 k: _. j0 T - </httpProtocol> ' ^. x5 p4 b7 @1 O4 w" T4 O
- ...8 G ~. m+ `- e( v
- </system.webServer>
复制代码 4 \( `, f" g' M
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。! U$ {& I% Y0 Q
, ?9 F6 @8 w6 C1 `, ~3 v) {2 g5 U3、推荐解决方法。
7 P& v' w) t; n+ Z0 o) @9 H- <script language="javascript">
, b a* B# p$ U0 y J: L6 z - if(top != self){/ u( w' K4 t1 W: b( O0 q
- location.href = "http://xp6.org/iframe.html"; 6 q4 ~; S o9 w- |
- top.location.href=self.location.href;
% m I0 T! [% K - } 6 m# c" ~* ?' W6 V! l4 a' S
- </script>
复制代码
& ?% ]( B7 U$ z将上面的代码复制到需要屏蔽页面<head>里面加载。- c" z' C: }+ T5 K& h9 ]+ j& K
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
, K1 l, ~7 C0 K; j' L: l& D原理:8 o. U+ Q/ N& T& [
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。4 E0 \# E n. ~$ z7 \
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。) s0 D% k5 q+ y/ l2 q' k+ W
目前测试这种方法没什么问题。
0 J& ?) @$ t$ w: u/ f6 G
% H2 q; l% I! K- d. m |
|