|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
$ j# v! S% o6 a/ [这次讲一下如何防止自己的网页被别人iframe。5 @( I. s# {5 w5 G
! H O" n7 o M1、这些方法都可行,但不是太可靠。 E r, w! k5 ]8 U
- <script language="javascript">
! Y( ? v, _/ A7 u& G - if( top.location != self.location) top.location.href=self.location.href;
$ u# A1 ]- S" B# S1 C - </script>
复制代码 或
) j8 ]: {% P D% O; b8 G- <script language="javascript">0 j; ?* F) C4 O2 e7 w$ A# r8 O! x
- if (top.location != location) top.location.href = location.href;6 s, v, b, Q" l
- </script>
复制代码 或% e* e3 `9 p- G. z/ K q5 b* q y/ e" R& S
- <script language="javascript">
$ I8 ^! K S+ r" C. q, Y/ {, U - if (top.location != self.location) {top.location=self.location;}
; p0 x1 F! M& ^7 [+ g0 D" U - </script>
复制代码 或( s3 _4 ?1 V- O8 d
- <script language="javascript">
3 p3 Q7 G S+ p6 H/ O - if (top.frames.length!=0) top.location=self.document.location;
* f q* K' k4 P1 k' V W, q- { - </script>
复制代码 不可靠的原因:
( D$ M# o5 }, A5 s# ]当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
0 N' Y4 l/ A- Z1 ~7 U# 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>& @8 z; ~" ?+ N% \6 K% O$ C/ E- o
- <script language="javascript">
e) h6 A p- v% j( `) ]) O - var location="";8 i- z- X m5 k# l0 v
- var navigate="";4 V1 y/ K5 Q9 W" G6 T" `
- frames[0].location.href="";4 s# _# J6 e' }4 ?& ]
- </script>
复制代码 或7 `( v' P+ M- r: D
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或 K% V7 v, k" N
- R6 Z& t' P8 r. O- <script type="text/javascript" charset="utf-8">7 Y' k( ^" V+ K
- 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 Y/ r0 g7 j% k3 ]& z - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
2 h7 C' i! F2 \6 K! xMeta标签方法
, M$ V- P R1 T+ o1 e- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法0 ~1 @4 z! w% C' y, U3 L$ H: [
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
* s8 x$ z4 G3 D: k5 {" A& Z9 h- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
: [# [( K2 l I8 q$ ]- add_header X-Frame-Options "SAMEORIGIN";
复制代码 : z8 _1 r! O# e7 `. o; N) U2 M
.htaccess方法4 r% m1 _( r9 a
在网站根目录下的.htaccess文件中中加一句
8 w6 H. b) i4 G* e" I- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
+ {1 j0 I- c# W1 F2 V+ s' |9 zIIS方法0 c, Q# g/ l/ N3 l- O
在web.config文件中加- <system.webServer>" P2 w* m% N9 ?2 \' z, b
- ...
" X2 w* o; o p3 \$ V4 [" g8 O - <httpProtocol>( @& j5 C" \, Y# H$ V
- <customHeaders>& s: H, p6 M J# ?. `. p( h, A
- <add name="X-Frame-Options" value="SAMEORIGIN" />
8 J( m: i! B. b2 J4 I - </customHeaders>
5 T1 T* Q. @0 E$ b& W5 f - </httpProtocol> 3 l ]9 w K0 Z* M& e
- ...
0 v1 b6 d' r2 b6 z" k) e! T/ t - </system.webServer>
复制代码 ; D5 t3 n" O+ w* z) W7 V
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
9 I! Q4 D& V- K5 N9 Q3 S6 m3 u0 } H. X
3、推荐解决方法。
' {+ j" I4 w0 |$ |3 ]! q5 T- <script language="javascript">
& S6 @! m x5 J% F - if(top != self){+ y& E ], `3 b9 r
- location.href = "http://xp6.org/iframe.html"; 0 y N4 |. q; ]# S' W- L* Q% L* l
- top.location.href=self.location.href;0 n& `& j3 U3 t1 }
- } ! [1 |$ E% H' \* H" K3 R
- </script>
复制代码
& k% i, t* I( j/ x2 Q# \6 E将上面的代码复制到需要屏蔽页面<head>里面加载。+ a0 e0 l1 W' |; q( B
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
5 F( |9 V/ i0 L: F1 m$ j原理:5 W+ L3 I/ L3 i$ t& ~# Q' f( v
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。* e& t4 |9 ^+ L2 ~; f
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。% Z. m. I+ m* w
目前测试这种方法没什么问题。
a+ I) y: W* N+ l' B# |% U7 R: l, y; }3 X9 F; [& a8 [8 g; }0 u
|
|