|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
3 y* V! z* o2 q: @6 }+ x8 O这次讲一下如何防止自己的网页被别人iframe。4 v" s* ]8 }+ A( v% e, F
' n$ W0 S# a. H- Z" O
1、这些方法都可行,但不是太可靠。
# O2 W' v5 v5 S7 A p4 r- <script language="javascript">
0 ^; n. w) U/ j# ~& }6 C2 V' D - if( top.location != self.location) top.location.href=self.location.href;2 z2 t' d& }$ U R0 I8 {# H4 I8 { n. j
- </script>
复制代码 或4 o9 t+ J8 q4 w7 m" j2 I
- <script language="javascript">7 w/ ~8 }$ R$ D5 U- k& T
- if (top.location != location) top.location.href = location.href;2 |2 S% ^; H* g' f
- </script>
复制代码 或1 m, {# s g& p; ~7 w$ E$ m
- <script language="javascript">
& u0 F- s: a8 q0 B. s - if (top.location != self.location) {top.location=self.location;}
/ f4 b4 G- G6 H - </script>
复制代码 或' B( ?. F8 F6 m( a/ \
- <script language="javascript">
8 ]4 t+ w8 \+ F9 k! m# g - if (top.frames.length!=0) top.location=self.document.location;
( ^1 N. B: V2 j+ _/ n6 M0 h - </script>
复制代码 不可靠的原因:
5 @% w3 F6 m& }当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
* K0 q% ]3 Y+ q5 Z) I) _3 v. }- <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>4 y$ W( d P: Z" r
- <script language="javascript"> / @+ P, f% }* N' K4 _) |
- var location="";% m2 u! @* }' [; D
- var navigate="";
6 g% H5 t0 F2 J3 Q' ^ - frames[0].location.href="";
7 z6 b9 k( @# V1 O' D - </script>
复制代码 或
4 m6 d: L( f# }6 T& ~4 D- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
, ]2 {5 l$ \# k7 `( L, U2 z0 N5 z. H1 w* U$ D& T2 g0 O4 G% S
- <script type="text/javascript" charset="utf-8">
{( ~6 o6 i" x% y; j, j4 M - 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>');) m$ V/ d' y$ ]2 T1 @1 Q: p! ~
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
" Q: z8 B4 q9 v. ]1 FMeta标签方法5 p4 H2 D( j- ~6 [7 P( a
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法! i+ F7 y: V: Y! |5 P& L2 q
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法/ D5 J" e! n6 d/ u/ {9 w7 V
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法" E1 s( M7 y# E; z5 }. G
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ( J% O) M4 W, v) F$ o9 p
.htaccess方法
1 x9 H! _# p& K5 \9 Q, A在网站根目录下的.htaccess文件中中加一句0 v: s+ N5 r2 f; R: G7 J. {/ f( P
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 7 M" `/ _: I' |, `- N4 {
IIS方法* Z) m7 F! |0 I4 ^: @
在web.config文件中加- <system.webServer>- D9 F% B, `0 |* H
- .... ]2 [! }3 m* u* ]; T
- <httpProtocol>
4 c: [; r) o; s, v, S+ q - <customHeaders>; u' r6 P+ m, ?$ ]
- <add name="X-Frame-Options" value="SAMEORIGIN" />
& N2 K. W* A& b# F7 @ G l/ v - </customHeaders> / {! I I. b4 {: F" x( N. x
- </httpProtocol> * `. f3 A3 D& T e! T
- ...
% {* _2 z6 v! C0 B) L3 p - </system.webServer>
复制代码 ; T+ c+ k9 ~9 W% b
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
) _1 n* a' d- k a7 E; N
- o: n& c4 z: R D) @3、推荐解决方法。
2 ]2 a5 P/ ^, L9 I! e4 y$ ^$ w- <script language="javascript"> 3 V2 a9 T9 n7 ]2 |; G0 ?/ U) x- d
- if(top != self){, U& z( M7 _ _1 ?. t
- location.href = "http://xp6.org/iframe.html";
o1 h8 r/ ]/ \! G# Z3 q - top.location.href=self.location.href;
3 ~" ^( V$ v- I, e6 I! B - }
. y" g2 \* W" f* y - </script>
复制代码 ; i( k) I' ^9 a, y* |& v
将上面的代码复制到需要屏蔽页面<head>里面加载。) G4 F! E; T' o9 y8 u6 ^
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。2 W9 I4 m$ I2 J' e+ ]
原理:# U2 d, J$ [+ F! E3 y- D; c
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。0 ?9 _ O' ]* Q
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
7 x. m. \3 \1 _# Z, ~' N目前测试这种方法没什么问题。
" S5 Y5 ?2 q8 X/ y$ v9 J$ I8 d; T+ |8 e1 y& r
|
|