|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。8 H N! q+ ]( a) _+ P
这次讲一下如何防止自己的网页被别人iframe。
. F) l5 V+ h9 N/ U. Q1 w7 A
2 l% M+ F; G9 ^3 W7 \. m! ^5 j1、这些方法都可行,但不是太可靠。* b3 _1 s3 \1 O' V$ H" E
- <script language="javascript">$ X' v2 V/ H k( K9 Z; v/ S
- if( top.location != self.location) top.location.href=self.location.href;& i, B2 N1 \: c9 m
- </script>
复制代码 或
& s! [8 J" A P7 u9 |9 B- <script language="javascript">' O7 ~7 O/ o6 T
- if (top.location != location) top.location.href = location.href;
8 [# H: d4 |( G0 Z" u# ~, S - </script>
复制代码 或
& i+ G% S* S- `) U. ]- <script language="javascript">6 j8 `" L7 ]1 ~) m# L) T
- if (top.location != self.location) {top.location=self.location;}
% M. j% F1 j/ m" l$ l - </script>
复制代码 或
5 W5 P$ H7 L! c$ L5 r9 B9 G' u- <script language="javascript">
8 A4 m+ D0 w; g6 V( K - if (top.frames.length!=0) top.location=self.document.location;
2 M" w6 z$ K& B - </script>
复制代码 不可靠的原因:* x# k+ a3 s7 N* S' n- R& p
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
- A+ {, V) {+ c( F- <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>* n/ j7 E; U1 d; M
- <script language="javascript"> 3 e+ g0 n) n# W: v& B
- var location="";1 B# \+ c$ `2 f! _0 r- S
- var navigate="";
( M$ W0 Q% a& f5 W/ W - frames[0].location.href="";( r1 }. O1 J/ W8 l+ I' i
- </script>
复制代码 或
# M. l& }- I* w: ^0 L6 }- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或3 q p0 D, j3 l3 t& ]/ r
* D- m; O5 R' M, f
- <script type="text/javascript" charset="utf-8">
l% y; [/ V2 k- W( T! x3 N0 H - 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>');
1 b9 t* t% B: l+ d; S9 m3 k - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。' _% @- K$ K1 X0 _& }
Meta标签方法
9 l2 U4 B* z. z' h/ G9 i5 h- d, n- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法" F2 n: w" p% J! }: m8 a
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法/ g/ B/ W" ]0 a" G: R
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法8 ^# h0 @$ b6 h' R
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 + [5 h1 W7 m; S- U1 n3 d
.htaccess方法
% O8 `! @' z( c+ S在网站根目录下的.htaccess文件中中加一句$ f8 F1 ]6 K1 `) F5 `/ e, M: G
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
' W0 w$ G; R! E/ L |IIS方法
- n( s5 ]; _# J/ I5 f在web.config文件中加- <system.webServer>
! e' f, v9 l+ w9 X: K; Y1 X* }; \ - ...- ^( }! E/ P/ B9 C: j) V; f; D
- <httpProtocol>
' [% N5 ^" j$ f- Y( k/ t5 S! [ - <customHeaders>
. F% y1 k+ \& g4 v) W3 h - <add name="X-Frame-Options" value="SAMEORIGIN" />
! e! V$ ]+ _4 T+ e8 B" n: H - </customHeaders> % C: ^0 c- W {! {8 t
- </httpProtocol>
9 ]) f( \# i8 J5 [. |, j - ...
9 F! d* C: n5 Z! s; @, X - </system.webServer>
复制代码
' x$ H" l; a# @+ `之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。" K! B8 O6 v) |: u+ z( J/ o
# N& i1 c8 R7 X; Z, @+ b/ r3、推荐解决方法。
2 h6 q4 Q$ d: e7 J; Y; L- <script language="javascript"> . J- V9 I# r( j- L! k% r9 z
- if(top != self){
2 q. y) B: J; t e- [% a* B - location.href = "http://xp6.org/iframe.html";
" D8 P& e% c- Q8 k - top.location.href=self.location.href;
' [/ b' y4 i/ T* T" ] - }
/ B' N* h9 d( w+ V4 {8 Y& p - </script>
复制代码
% b: ?3 R2 F) Q0 g4 w) s- X' J将上面的代码复制到需要屏蔽页面<head>里面加载。+ ], P/ R0 D( G; o8 r
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。# \# Q$ q, z- k3 `3 J# B5 [
原理:+ J. ?# k8 E, B& g, c; ~6 {+ {
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。. D. G, V& L8 O8 C0 [
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
: b. c. D" ]0 L! U0 X( J目前测试这种方法没什么问题。1 X$ h4 x* l! I9 p% z) |0 ]9 v( w
1 u2 q2 A: j4 C6 Z3 u
|
|