|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。% ~8 B0 c$ ?$ {0 z# Y
这次讲一下如何防止自己的网页被别人iframe。
7 b9 J! R( G7 [$ }& P$ @+ Q0 h+ o) p+ v; O" B" f2 R
1、这些方法都可行,但不是太可靠。, U; b( c! p' |6 G
- <script language="javascript">, Z( Z4 Q+ s9 `0 m2 P; j
- if( top.location != self.location) top.location.href=self.location.href;3 Y1 A, Y: J) X: |6 V, y
- </script>
复制代码 或
7 H, T* }8 U( f1 J- <script language="javascript">
$ J/ p8 ~( p# q& U - if (top.location != location) top.location.href = location.href;
; v( J8 y) c, T6 h - </script>
复制代码 或1 {) p& h$ z! R$ [1 V- T, @
- <script language="javascript">' E1 p/ i" n! K2 J& q7 M2 C. c- ?
- if (top.location != self.location) {top.location=self.location;}! X$ i. B' I+ b/ P
- </script>
复制代码 或
# Q5 b! W0 [" m+ U, m5 M2 Q- <script language="javascript">
3 ~6 K) c% f6 V5 S - if (top.frames.length!=0) top.location=self.document.location;, e1 R* U% B& V- T
- </script>
复制代码 不可靠的原因:% }. l% K: U$ ]/ H7 V7 j( h
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
7 x, t: p! i V/ {! z" C- <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>" j2 } I( C8 \/ H- f- E
- <script language="javascript"> 0 h o$ g' p; w& @! `( W
- var location="";
+ f. x2 _* z8 @: O& T( d; z - var navigate="";% Q# Z' h' D3 X! P+ _5 a
- frames[0].location.href="";
) U C: w4 D. I/ M' L - </script>
复制代码 或- J5 n0 o. s4 n- o
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
+ l2 k0 Z& `- R! e) z! Z: c; h+ l/ C) P' K
- <script type="text/javascript" charset="utf-8">
9 @& t/ ]4 x* C4 P* ~ - 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>');
; @) F' c8 R% |, L - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。* g1 p/ J5 h) L$ D4 X& _' }+ M
Meta标签方法7 R8 ]3 N0 O6 \% r% S+ ~& O. f
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
3 Y0 @+ L8 g, G& Z- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
! I6 `) H) K# m- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
4 ]/ T$ H9 l' u5 }- K. G% r8 V9 N- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ) P1 G- W7 R( K( n0 F( \2 z, Q; r
.htaccess方法
: R6 X& ]2 A& C在网站根目录下的.htaccess文件中中加一句8 |$ L& a* W9 J8 R- U/ E9 M
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
: m. a# r) c$ g0 u7 C& nIIS方法9 Y; H9 T; v, v( X; m5 y
在web.config文件中加- <system.webServer>
2 x: k% k+ ]6 W6 @ - ...
0 G0 b! R7 W6 _. R; r) D - <httpProtocol>3 G/ d( @" W+ ?, A& b$ r
- <customHeaders>
$ H( b2 _' |. l+ m. ] - <add name="X-Frame-Options" value="SAMEORIGIN" />
4 G+ [+ d5 \6 O7 V5 i. p4 m - </customHeaders>
! u4 n1 l: {3 W# } - </httpProtocol> 5 v0 Q/ z8 ~4 u( `
- ...+ k( S: A9 w" O3 Y! b
- </system.webServer>
复制代码
7 G. |2 Z4 h5 g! o6 Y之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。5 n7 C3 M" _ \$ P2 H9 `% h& A8 t# j
/ Q- P$ Z$ N" _2 k0 h; a
3、推荐解决方法。7 }( f" R- X4 {( s
- <script language="javascript"> # {2 o5 l) ]/ C4 M' B' A! o. o
- if(top != self){9 g' Q) e# I4 c1 m$ _- U: ?
- location.href = "http://xp6.org/iframe.html"; : J8 R$ m& c9 q1 J. t9 }/ ?
- top.location.href=self.location.href;( K N, W# R6 ~. G9 p, T8 j r
- } : I' g( W6 y* R
- </script>
复制代码 `- X& n ~) V# j' A- p
将上面的代码复制到需要屏蔽页面<head>里面加载。& @( @- L3 O5 U' Q, K8 `; M
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
3 D# f5 h! q" `" K原理:
* H2 Z" H+ [0 S第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
+ l' [' I; \6 L# J第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
0 B( C0 h, G( e/ N目前测试这种方法没什么问题。 Z( ?5 ]$ o1 E
0 d- f* C( w% ?, W
|
|