|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
+ Z# y0 T2 p% j( f3 X: r$ {; C: m这次讲一下如何防止自己的网页被别人iframe。
2 }# e! p0 ~5 t! u2 e0 b4 `- f2 g/ ^% p5 n
1、这些方法都可行,但不是太可靠。3 q2 B. I3 H% L8 Z* p. N
- <script language="javascript">, U# r0 t0 y* _# m* D
- if( top.location != self.location) top.location.href=self.location.href;8 @; p! Z j% | h# b7 H0 C# ]
- </script>
复制代码 或
, ?% a" q4 x" C9 r6 V1 J- <script language="javascript">7 ]& P9 n% M7 y! o) _( G$ Q `" b
- if (top.location != location) top.location.href = location.href;' |. N1 H* S4 a
- </script>
复制代码 或% h6 v' U- M( ^' n: { q5 Y2 ]. t
- <script language="javascript">& S6 }" W5 v0 Z/ |: P m$ k% `
- if (top.location != self.location) {top.location=self.location;}
/ o" f6 y. t: T( ] - </script>
复制代码 或( M; L) t0 G3 m0 z9 h( H% q0 {
- <script language="javascript">
: H! c& V5 R1 m; m6 ~4 U - if (top.frames.length!=0) top.location=self.document.location;
: R" x0 ~5 k) v+ r - </script>
复制代码 不可靠的原因:- \! D$ s3 F) v) o8 k
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
# a1 T# o$ ? C3 g! d- <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>2 a- q$ }+ B6 E0 ]) t
- <script language="javascript"> & J( m+ p% `% f
- var location="";
' r# y% y m t5 I - var navigate="";% r" o0 U, q* J, P# B3 \) t4 y# }
- frames[0].location.href="";
. S4 K4 _% l* n- T) t6 k) J* K9 K7 { - </script>
复制代码 或
+ q8 n% F( D& F* s) v; I* o# \1 U- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
3 L' f" r. {% c- n2 i5 |
7 z1 c5 E& b# P* D4 ]9 |- <script type="text/javascript" charset="utf-8">
" T9 F) K% `& @" D - 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>');
2 O. S* f- H, i3 {& N0 q; r - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。; m% _4 A9 ^, b' n
Meta标签方法
0 j1 J' _8 T$ ]- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法+ z q/ T4 H) }+ c( S9 {5 X7 n- s
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法+ X+ o) F! [3 T% U% F) ~5 U" J$ X
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
" M. K( W2 V( g3 f3 S4 I- add_header X-Frame-Options "SAMEORIGIN";
复制代码 1 e% E7 L, v9 s4 ~
.htaccess方法9 N, D `3 h, B; p( A
在网站根目录下的.htaccess文件中中加一句- r2 n' \8 j0 f C
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ]) B) b+ j2 `0 y! J' a
IIS方法2 R6 T+ r6 S4 H2 K8 C* b2 ]
在web.config文件中加- <system.webServer>1 s( m: \. B7 B( v
- ...
' A% k2 j4 t. z$ M - <httpProtocol>2 X9 r/ c0 s& r: R
- <customHeaders>
2 B Q9 l& T- V: ]: p1 i - <add name="X-Frame-Options" value="SAMEORIGIN" /> : x- ~. A% l: X* ?) p% k
- </customHeaders> 5 F9 T d' k \' x6 b
- </httpProtocol>
1 N! v( z( h* x4 E9 h - ...
, s m% }9 l$ f) A$ Q" } - </system.webServer>
复制代码 5 F8 k; @' @. p7 Y, V [% [
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。! H, s& A, G7 T9 z
* G; R$ Y4 u) N' D! \3、推荐解决方法。
3 Y8 Y X1 s7 I, I6 x* H- <script language="javascript">
6 e4 K1 k r0 g" {" |* K C: Y4 y - if(top != self){
! B/ Z4 y) o J# M- h: ~! {. P( M - location.href = "http://xp6.org/iframe.html"; . e4 V y' l/ Q, a0 p3 u& a9 ?
- top.location.href=self.location.href;
7 h; V8 ?; f- ` V; H! i - }
; N( Y( z" }! s Q - </script>
复制代码
' I( a9 V6 z2 j" z; i( `将上面的代码复制到需要屏蔽页面<head>里面加载。 C: s4 w o1 v4 d4 I0 I+ j
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。3 Z! r+ h% b* O' V# l6 |! t+ R
原理:$ f$ ~" n* O- D. x$ l& k
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
- T! x+ H! J2 Y7 |4 z第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。; i% ?9 V2 m$ } ^% ]8 U
目前测试这种方法没什么问题。$ N7 M& }! K% Y2 ?# s& K8 y4 p
" ~! s+ v; F/ d2 P3 M
|
|