|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。' b' `0 d$ N; @0 O4 S9 {
这次讲一下如何防止自己的网页被别人iframe。
9 p! N$ a. r8 Z% p0 W
' N1 _% `- w3 U) l1、这些方法都可行,但不是太可靠。0 `' B/ h3 g8 S. t/ `# J3 q
- <script language="javascript">; R4 |6 b+ X" @- D$ G: |
- if( top.location != self.location) top.location.href=self.location.href;6 ^. j" G5 q* n! E/ W
- </script>
复制代码 或8 N, C5 A" p7 b7 V, [. q7 \
- <script language="javascript">
6 J/ _' Q" q. W- P. j - if (top.location != location) top.location.href = location.href;) O6 T d9 \ v6 _
- </script>
复制代码 或/ Q8 G2 F& k. v( J4 e3 M3 \% f
- <script language="javascript">
% P6 ~/ z. k7 q0 m) B: f5 Z. I# _ - if (top.location != self.location) {top.location=self.location;}$ R4 X* G3 w* A# A
- </script>
复制代码 或
V. M( g8 V- F- <script language="javascript">! g! ^+ F$ j) R
- if (top.frames.length!=0) top.location=self.document.location;. |+ m$ y6 ?/ y' { @- y6 [
- </script>
复制代码 不可靠的原因:
6 Z7 Q" |4 w/ t当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。& I/ u2 x3 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>
* v6 `3 h- h/ L - <script language="javascript"> 7 d! ~% L4 M3 M, {. Z) {
- var location="";7 n+ s1 ]7 o9 T5 F* i3 m& s
- var navigate="";3 D( ]; I- G+ E U! B a6 V
- frames[0].location.href="";0 t5 \. T$ K7 q/ I/ r
- </script>
复制代码 或
* s" i* B$ Z- Y& y4 @- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
8 |7 }- \ \# a/ ]- I Z7 _9 s9 D3 t$ q' _5 j( ^* @! ?
- <script type="text/javascript" charset="utf-8">
9 y' ?. R5 ?, D - 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>');
! l0 Z) x7 ]! S7 S- E3 F! V - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。' o+ W8 F3 M$ x% ?
Meta标签方法
" P" G3 I; @" W" Z* u k5 x- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
& R( A% B) k* y& Z: l6 @! v- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法' _1 ]* s9 j, a, Q
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法8 y5 R( J( l& C! n, k/ v9 E, i7 [
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
6 s- l, d9 Z& a* i4 W.htaccess方法1 I. [' [$ S1 n: c4 `; x
在网站根目录下的.htaccess文件中中加一句- g6 }7 [1 M1 t
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 + @) {* U! G7 Z( N$ f1 P' W( f
IIS方法
1 {+ w- ^1 X; I# X9 I; t在web.config文件中加- <system.webServer>
9 e% j0 p" z; R' J" f6 T% J( @8 c - ...
/ {; m) B/ D [4 G% Q - <httpProtocol>2 A. w2 p3 T N; b5 v1 S- c2 u
- <customHeaders>
, k8 J$ v* c, M) S. t5 x - <add name="X-Frame-Options" value="SAMEORIGIN" />
6 N/ p2 n/ D! `; M - </customHeaders>
- b/ o- A$ X/ w: g$ X - </httpProtocol>
& s/ V- S+ [7 | z0 A - ...2 ]" [' Z! C% r4 N. h% o+ X
- </system.webServer>
复制代码
' d& Y. @3 J! G3 u, m之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
) h- A8 [ P( O& d1 P# Y
7 v" N6 M) c- _. m* q3、推荐解决方法。, ]* k3 Q% y1 s; V
- <script language="javascript"> , A3 K# m, ~) E: W4 }
- if(top != self){/ B3 ?; u4 F6 W- }7 C9 T9 y1 P
- location.href = "http://xp6.org/iframe.html";
% W! n+ X; o! ~; E - top.location.href=self.location.href;: C0 G5 Q' E$ g
- }
/ ~7 \, a( M5 \7 D - </script>
复制代码
, v$ E2 K: q+ G3 N9 O' Q# ?! u将上面的代码复制到需要屏蔽页面<head>里面加载。
# ^! p5 m( `* a" x/ [" L$ v7 t制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
4 D+ U _+ a/ }% j原理:
9 z7 z* m: ?( _1 R第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# m& n7 Y9 ^1 M8 L4 T第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。* D5 e! S; h: [7 B
目前测试这种方法没什么问题。& k, Z% W# C3 F) a% ]% N3 W1 H
5 ~ H; O+ D/ L3 [& ^ |
|