|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
* v$ J8 J; n6 {- U这次讲一下如何防止自己的网页被别人iframe。7 a. z+ P$ n5 w3 Q0 A1 |6 Q
& Q, x# L5 R) `$ b+ h. p
1、这些方法都可行,但不是太可靠。0 X) s) O2 }7 e
- <script language="javascript">
( E1 B! v7 g" F8 O" G" I - if( top.location != self.location) top.location.href=self.location.href;
2 c$ ^8 R5 Y! _- C; B1 G - </script>
复制代码 或7 V' k! R, i. R, l8 r: R. o
- <script language="javascript">
' f9 ~0 R3 Q$ x# q - if (top.location != location) top.location.href = location.href;
6 s( \/ i; Y4 a" ]7 p# @ N% y - </script>
复制代码 或
& a) \& f8 {/ Q2 A- |6 G) N9 p- <script language="javascript">5 b. _" E1 T6 t! q% _0 Z8 E! h& J
- if (top.location != self.location) {top.location=self.location;}
$ o4 @% ~. T) B8 Y - </script>
复制代码 或
2 X, A( i9 o1 F$ p+ x' T" c- <script language="javascript">
7 O; ?/ C. q4 I4 R/ @ - if (top.frames.length!=0) top.location=self.document.location;7 ^) {2 ~0 W. B8 p" |( x
- </script>
复制代码 不可靠的原因:
+ j9 I! ?: m; k8 O3 m+ S当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。" C# j6 h" n, d# Z* E
- <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>8 _& i; Y9 D1 d$ f; H
- <script language="javascript">
' A/ W0 \3 E* A$ q4 G+ X( _' c# o - var location="";
% r; W. R" l0 }" P3 R - var navigate="";: Q' x9 @3 S& _2 e/ S' i0 T5 p
- frames[0].location.href="";
! }8 Q- u7 @/ T; J - </script>
复制代码 或* Y) L7 S; K2 g; u6 c R
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
4 s. f8 o4 j! `( z2 k; Z& ^7 [; p) b7 k. ?0 I
- <script type="text/javascript" charset="utf-8">
) Q3 {0 r% |% W1 @! y - 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>');
# G1 [# r; O# p% M( B S - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。 o- Z9 t/ n( j% f: h
Meta标签方法: c" R( k7 P0 `" S8 S% ^, I3 d
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
; M e3 r0 T$ a5 Z/ \5 {- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
5 k3 e3 A7 w: G7 ~7 H+ F* i- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法7 `5 k+ T. o6 `5 x
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
" e! T6 Z8 g( D! f" E4 \.htaccess方法
6 ~9 K- G" u+ [4 p6 H* c在网站根目录下的.htaccess文件中中加一句
9 L0 `( @ O z1 M) h- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 : |8 B. {& s# X0 ~, @; I: o
IIS方法8 F/ d8 z [' f: y
在web.config文件中加- <system.webServer>
, q$ {$ X: L5 b4 t! s8 C5 W - ...
" ?/ [$ N9 `% ]4 [ - <httpProtocol>
/ a! j) X4 ]( ^) F+ D& n - <customHeaders>1 \' n( x# o& j8 c/ c7 d
- <add name="X-Frame-Options" value="SAMEORIGIN" />
/ t! @( Q, J! @; f" T/ S1 E& U - </customHeaders> & |' V/ N0 Q4 J* n1 Q: u" T7 i, s* ^, q( ^
- </httpProtocol> ; V- C3 d% v% d' H7 _" e
- ...
2 j) A% R6 D% t- \0 P - </system.webServer>
复制代码
- P# v! S' a5 y; L' e% Q% w之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
, ^6 @3 X- J; [( Z9 J+ N$ g
4 u8 `) q5 k/ V. S9 r6 w3、推荐解决方法。
9 A# m/ L- t6 O. l! V; H- <script language="javascript"> 2 d S: Y& F1 G+ z
- if(top != self){
7 n0 i$ c4 p. p; k6 H6 v- @ - location.href = "http://xp6.org/iframe.html"; 1 V4 T$ p& }3 c2 X
- top.location.href=self.location.href;7 H) m* Y0 S1 e6 f! m
- }
( x1 b1 j8 J Z& J - </script>
复制代码
' Q1 \8 u; a9 y4 U& W* @) M, D将上面的代码复制到需要屏蔽页面<head>里面加载。
$ Y! c% X3 q- j; U制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
4 l6 b* f& U% n5 y# U原理:
a: ^! [* K, l! @* \第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。( W: n! }- b" Q, z
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。7 ~! o7 T) o) W, w7 l
目前测试这种方法没什么问题。( u+ Z" p3 F: L+ T# F
( C* b/ `' h1 Y, W0 C, c
|
|