|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。, @5 w% o2 N" E4 d( @7 w
这次讲一下如何防止自己的网页被别人iframe。+ a, h0 x! E u4 }- |# J( F
) O Y4 |- u" l: g% z1 A1、这些方法都可行,但不是太可靠。2 b- E8 |, |& A% t9 E$ S, |
- <script language="javascript">
, o5 U8 k% H. L. a, e% ] - if( top.location != self.location) top.location.href=self.location.href;2 s5 {. n: {( T0 |: C8 a/ Q
- </script>
复制代码 或' `0 y6 v8 i/ g, d/ m5 {: b
- <script language="javascript"># m9 j* a$ |. D% x, |% {
- if (top.location != location) top.location.href = location.href;: x: O5 j% Q- @5 J% F, {1 t
- </script>
复制代码 或
! V9 K2 p; ]" D8 w- <script language="javascript">2 k: V% Z- f& M- d
- if (top.location != self.location) {top.location=self.location;}
: k& S+ X9 L6 Y5 u - </script>
复制代码 或2 A& i: ?) R+ m2 O( y
- <script language="javascript">
6 q* J2 `: N" y- ~. p" t - if (top.frames.length!=0) top.location=self.document.location;
) I# A" c% V* D! f - </script>
复制代码 不可靠的原因:# w7 d5 ]9 J/ V0 }
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。; Z& J1 D7 ^8 w* W6 F6 {$ E# l
- <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>
, q$ v6 e" j( H( _% t - <script language="javascript">
. E! e. x% k2 F) b9 w - var location="";5 w D* A! z' I) g: G. ?- `
- var navigate="";4 v4 s, X% U) }0 X
- frames[0].location.href="";) g8 p' t) J/ R. Y" g
- </script>
复制代码 或2 t* _% R- R+ ?- |
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
- A! X. ^5 e- U3 `
9 f: C% p- F( ?, Y& }- <script type="text/javascript" charset="utf-8">* D5 |0 F0 P, Q0 h/ l9 C, m/ F3 t
- 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>');# U. v( r9 \) P7 l4 a1 |6 m
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
6 g5 `# L3 l. E ^, J4 LMeta标签方法( |5 a; f; \( t* L' G. ?1 A
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法! e5 Y/ Q# ]& _* O9 h5 Z
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法6 ~( U. e) P7 B6 f, ?
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
4 g/ W: T* Z' [( t- add_header X-Frame-Options "SAMEORIGIN";
复制代码
5 J1 T4 Z' v2 _.htaccess方法/ R8 u6 B! O' H4 c' J
在网站根目录下的.htaccess文件中中加一句 _8 ]- ]+ {# ]3 _ n) l- F
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
: H& O/ G( V7 _2 c9 v; YIIS方法
6 Y2 |% C1 u5 I7 `9 L* R$ C5 G. o: G在web.config文件中加- <system.webServer>
. x. I7 l- J+ x1 n5 d) M x& c% d - ...: l: O( h* a' c% H( f7 T G0 c
- <httpProtocol>; G& I. W$ _2 s( u5 J! R1 u) g
- <customHeaders>
- w9 }+ w' P* j' r/ x9 h ^" B - <add name="X-Frame-Options" value="SAMEORIGIN" /> " t! x: N5 R$ d, N
- </customHeaders> 9 f& h) |4 G' Y: Q
- </httpProtocol>
( {6 C+ G, C4 U+ k$ u1 t/ u - ...& w% b3 O4 l1 I9 g$ s) K
- </system.webServer>
复制代码 $ W I1 P3 ?% u4 B8 Y/ j' K
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
# m7 j, c& r/ i5 H& I5 f
+ Z/ j: q- r7 a; k2 Q" K3、推荐解决方法。( i3 n! O5 a( e8 m' c) S
- <script language="javascript">
" f D5 a6 y; p8 w$ L2 N - if(top != self){/ h+ l/ m1 Z" _% }- @. E- n
- location.href = "http://xp6.org/iframe.html"; * I( U! [$ M1 B/ e9 v4 Y
- top.location.href=self.location.href;
. E7 v4 x+ I/ {( {: ?! I( }9 y4 E - } 8 F0 W6 M: A1 e3 b
- </script>
复制代码
0 K+ [ z3 K% Q6 r8 Z+ [! F将上面的代码复制到需要屏蔽页面<head>里面加载。
5 S0 M( x+ L1 A- I W制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。, W9 Z% K* J# r
原理:
& D9 f7 A" x9 h8 y# M0 H第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。0 l6 w' Q9 L. h( R
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
% y! H- _2 n& w+ k1 |5 O* q目前测试这种方法没什么问题。
5 W; Y' `& S: P7 ]' z
; z1 J" O* G/ Z1 W0 D |
|