|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
; M6 ?7 i u% Y9 t3 M" J3 z这次讲一下如何防止自己的网页被别人iframe。
4 s( D! R4 ^' R/ d$ j& M/ T B2 i3 G- G; J% i6 n* a* b0 B
1、这些方法都可行,但不是太可靠。- S+ {: G) \1 b% `. Z7 S4 O
- <script language="javascript">2 ^: D6 c Q9 ~7 Q# e
- if( top.location != self.location) top.location.href=self.location.href;; ~( P {# V6 E, X( r, u- `
- </script>
复制代码 或# s! R. ] c5 R
- <script language="javascript">
/ I0 Y) i |2 L% D9 R% g! L! Z - if (top.location != location) top.location.href = location.href;
7 p$ J7 N& W: I- D8 a2 `7 A* d - </script>
复制代码 或
, ^1 t+ E( P U- q& S' N- <script language="javascript">4 {1 o$ h# A' u' v# Q5 V2 w: q
- if (top.location != self.location) {top.location=self.location;}+ ~. x8 v6 C Z9 J+ a
- </script>
复制代码 或
- G5 @" Z0 b, [, ~, T( |- <script language="javascript">
& I9 n6 F" r- U$ K - if (top.frames.length!=0) top.location=self.document.location;
/ E, ?7 T$ l6 b - </script>
复制代码 不可靠的原因:
# D- q1 x$ x) y0 V当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
7 P* l j$ z; c7 h: o: c& q- <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>9 P/ p; `- O/ N& ?0 |1 w; g' `
- <script language="javascript"> 0 w" I3 _4 H9 C k, f* I% M: L
- var location="";2 Y$ S6 }, D7 Z9 I. W. A( H
- var navigate="";+ w; m0 ]4 f3 [. Y0 r6 Q0 [0 O4 b
- frames[0].location.href="";% Y0 v$ d( e( {
- </script>
复制代码 或# o' \! B- Z0 M4 m ~! D! D3 x
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
5 O; u# b/ g; x6 y" W# O, n
& t( W! Y5 i7 [+ E/ J" _" Q# o- <script type="text/javascript" charset="utf-8">
; A* R: @. I/ w! Q- I; m. S: | - 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>');8 ]$ _: }8 c, E: K
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。5 a- C( N# \- t8 b
Meta标签方法6 K% o- h3 s, l
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
7 k" s# ]- C. t; H, {: }- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法3 v7 O8 `2 R7 Z/ A7 U
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
/ \9 D3 g3 Z! F; a# l4 |- add_header X-Frame-Options "SAMEORIGIN";
复制代码
. b0 v0 u5 y! D.htaccess方法
0 S% x& D; w0 }7 V& S在网站根目录下的.htaccess文件中中加一句: \' p9 ?/ k- w" x$ r4 u
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 + L7 }1 q% K! o3 c$ j( v
IIS方法4 v+ v% K7 G5 ~' Y& p
在web.config文件中加- <system.webServer>9 f& `+ L2 `# X1 U
- ...
9 v" u$ } ~+ S# K0 N2 o( N - <httpProtocol>8 r A! l8 l8 }0 R
- <customHeaders>6 R/ K7 K+ R/ Q' Y
- <add name="X-Frame-Options" value="SAMEORIGIN" />
- k/ R- W9 B$ @; o" u& P5 |0 o+ S% y - </customHeaders>
8 c5 N: G% Z) t. ]6 |8 C - </httpProtocol> ( R v. z/ r9 {/ \- O
- ...$ d9 Q1 N$ g5 D# h8 A; A% m/ ?" W' X5 P8 d
- </system.webServer>
复制代码 - t1 h6 z) C+ B6 z7 P4 U+ {
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。' s$ W% r/ J- S3 V
) f ? B0 C) V% U
3、推荐解决方法。; n9 R# h4 I& D3 M% ~
- <script language="javascript">
, u2 z* ~8 @8 ~! {6 ] - if(top != self){5 F) G3 E8 P5 N/ r0 G8 A K9 b9 U
- location.href = "http://xp6.org/iframe.html";
( P# \0 N; V: e2 c) G - top.location.href=self.location.href;
2 F5 k* p4 b& ^- k* K - } " D6 t1 T* q( ~. s T3 U
- </script>
复制代码 ) \- U( p6 q! E, Q2 t+ p; H3 h: ?
将上面的代码复制到需要屏蔽页面<head>里面加载。
+ |6 G* r" j" m# {制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。" X# b: n# ]! ?( T6 J( c' H
原理:4 g. b8 |5 ?- k
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。! s1 R6 Z; `0 k
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
4 {6 G6 Z7 T! u目前测试这种方法没什么问题。( W$ J. P, H8 ^! U" X
# U6 W5 C7 r- Q; U |
|