|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。: p t, F6 r5 E0 Z/ {" h
这次讲一下如何防止自己的网页被别人iframe。' F2 C2 A/ A1 H9 N! G0 X0 \
" l* R6 T/ H6 j. x/ h5 h+ ~+ S: Z9 z1、这些方法都可行,但不是太可靠。8 T9 C+ _2 G9 l
- <script language="javascript">
( S% K4 `) C- b% f6 n7 Z5 C C5 Y$ Y - if( top.location != self.location) top.location.href=self.location.href;" r& [( T9 L4 l6 t3 T
- </script>
复制代码 或, h; Y% S* y' h# g% y+ s7 i; F
- <script language="javascript"># Y4 B- P( H* m" R% T1 ^
- if (top.location != location) top.location.href = location.href;
8 b& d7 T& K T - </script>
复制代码 或
) A B0 ?1 k6 B( }( B& }- <script language="javascript">5 P! r! D2 O- g- c9 t: _: Y% j8 ~
- if (top.location != self.location) {top.location=self.location;}. [! Y) ?2 E( ?. x+ }6 N9 D" z
- </script>
复制代码 或* y3 }0 H" h/ J; k, _2 \
- <script language="javascript">& R. |& B. l5 @) `6 `
- if (top.frames.length!=0) top.location=self.document.location;, C1 n2 \0 Z5 T6 q5 W% g9 o% D( ]
- </script>
复制代码 不可靠的原因:
) r- W, l5 c8 z0 S当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
8 ?; @0 p8 I& }2 L/ e/ I* _- <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>& i* h1 U+ V7 [& k5 _) F
- <script language="javascript"> 7 z) J y( q0 m' F
- var location="";: P) |5 m5 n1 R
- var navigate="";
5 ^$ O1 H# K, ^) L - frames[0].location.href="";8 F3 y C4 \0 F
- </script>
复制代码 或
. O4 W3 J, t& L1 p( U; n/ S- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
5 l. C' o* ]* }4 ~
1 |0 }7 n! m0 [- <script type="text/javascript" charset="utf-8">2 [/ k! d/ M6 @/ [' Y! t" |" v
- 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>');
, {) k J0 X' O9 f" a - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
) Q4 d2 @' Z; E/ U* kMeta标签方法; e" l+ Q# {2 n; c# X
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
. _1 a. M2 K& T1 Y9 w! c! I- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
3 Z! l: R6 {! f. O7 k4 A k- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
; ~# S6 r# w6 C+ a& g/ V" X- add_header X-Frame-Options "SAMEORIGIN";
复制代码 9 Z7 N$ D/ {! ^6 H
.htaccess方法1 O5 m' }' Q: k) g' ]1 S: ^
在网站根目录下的.htaccess文件中中加一句
& ^' f+ Z' u3 G* B4 a1 `4 B2 B4 ^- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ! U) h! I3 m' B8 ~' O# I1 |
IIS方法
" ~, r2 V! u' T, p; T在web.config文件中加- <system.webServer>
0 u6 L, d, \9 P0 i - ...! [) `* |0 w* l6 Z8 z9 Q
- <httpProtocol>( L3 l2 H* s# k3 _$ W5 y7 G
- <customHeaders>
2 i0 O" \0 [) Y' h - <add name="X-Frame-Options" value="SAMEORIGIN" />
8 z/ I0 s& B; ]0 H, @4 N - </customHeaders>
3 u3 a8 @ U6 n& B+ K5 }2 r, Y4 y+ z - </httpProtocol>
! D6 F5 W' l, E- W3 b# ~ - ..." M& c# ?. }$ _2 G
- </system.webServer>
复制代码
; l: P7 m2 v* W& F5 F P之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。/ m$ Y @, O5 N& k$ j7 O
/ l, @# R# v' c$ b3、推荐解决方法。2 O5 H9 l- H) C* k8 Q
- <script language="javascript"> # y: F+ U8 q7 |9 i @
- if(top != self){. g% Z V* P' h* }0 q/ y
- location.href = "http://xp6.org/iframe.html"; & E# M4 w/ H, g) Y4 }- k, {
- top.location.href=self.location.href;- C1 {7 o9 n- q" S a& m+ x3 n2 `
- }
5 ^/ l) y. A. h4 j1 q. y8 f9 h% w* ? - </script>
复制代码 0 W7 Q! T3 l" T6 i6 x8 l+ a' W. w
将上面的代码复制到需要屏蔽页面<head>里面加载。
# p; K; K7 t# S# x! F制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
: H- `- ~8 G& x0 w! D8 t1 u原理:
' o8 e n+ x' r第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。! x# J: H W/ B: ^1 B1 B
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
# j3 e4 J7 A; }3 q9 _9 R目前测试这种方法没什么问题。' L: b; z# b* G' K. a+ K
% L* h" i$ P% a" h4 } |
|