|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
% L! m% J( n# x1 A9 p2 u* w$ z这次讲一下如何防止自己的网页被别人iframe。" ]5 [' k5 @, z$ p0 A n5 A
5 p: n& o: g+ S, q- g& H2 d
1、这些方法都可行,但不是太可靠。1 H6 O" b9 ]- |0 G K
- <script language="javascript">
) U* e* M: L7 s- R( M, M - if( top.location != self.location) top.location.href=self.location.href;1 ^+ K- Q+ U8 w: U6 u
- </script>
复制代码 或5 n6 T8 y) J3 N( j- _, v$ |
- <script language="javascript">
$ a; M- W0 {; K* M. C4 U" J - if (top.location != location) top.location.href = location.href;
$ _! ?* y- J& [5 } - </script>
复制代码 或
6 s e3 K' k$ B" d( U- <script language="javascript">4 T8 Y$ }( l( s _3 b
- if (top.location != self.location) {top.location=self.location;}; G! Y8 W* F2 n% Y* @+ ^
- </script>
复制代码 或
1 p& ~! W9 i' j& [( s- <script language="javascript">3 @* }% {' z. q( a& s3 }5 [2 |% @
- if (top.frames.length!=0) top.location=self.document.location;0 o7 s3 T' ~$ R) @0 p
- </script>
复制代码 不可靠的原因:
- v4 F" V3 g; p( e6 u7 O, f- G当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。( V$ `. R0 W7 }% P/ I7 z
- <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>
0 C, ^* Y+ n5 N% H - <script language="javascript">
0 Z6 x. O' V, ^ - var location="";) c. k. ^! a. J1 L4 P: e1 f
- var navigate="";
8 q# d, X& u4 ]9 }( M - frames[0].location.href="";$ U: v! o! [2 x$ c& g D" P" n
- </script>
复制代码 或$ X5 s1 b# y2 R) A5 Z6 p4 |
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或8 G+ i+ I& I: n& p! g( X
) z: r; W8 q! ^) R
- <script type="text/javascript" charset="utf-8">
6 [7 [; W& ?7 t0 S, J0 l3 i8 j - 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>');
/ R X- h! F5 ]5 H7 L - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。) q4 ]+ r d" i" z; U
Meta标签方法1 F" x, P/ I; l. x, o6 q0 k
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
5 D, M9 r+ j* d# T ?: c- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
3 r1 |" V" J5 j" B3 [/ G( t$ [- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法. c* n2 K. n& E9 O* M0 T
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 0 v0 X. o# M& o' e% G- B: R3 o- z
.htaccess方法3 n8 {6 S% z9 Y% [& D3 n
在网站根目录下的.htaccess文件中中加一句* B; m, J; E; h1 w
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
4 e5 F( ]* v' D6 ^! n! SIIS方法
7 x: K3 A7 D- R" ]8 A' f5 f在web.config文件中加- <system.webServer>
% X% y" w$ G& B4 n: f$ w9 j+ a. l9 e - ...9 b% F: y9 _% ~8 U2 q. V' \
- <httpProtocol>
# m9 h2 C4 ^" v - <customHeaders>
! A2 m2 s' J) r - <add name="X-Frame-Options" value="SAMEORIGIN" />
$ F9 `& P$ Y+ [# [ @- B - </customHeaders> 6 l/ P7 w* p0 p1 w& u: I
- </httpProtocol>
, [' i/ l% ], n - ..., M8 ]4 N# }3 d) c
- </system.webServer>
复制代码 $ S$ @1 e# u/ k" b# h
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
4 @6 g3 ]% H9 p: G( U2 l, j$ z/ W. Q( L6 L
3、推荐解决方法。
: q! l9 |" g4 j' P+ t2 z- V6 u, A- <script language="javascript"> + Z: `- H! Q4 H, C
- if(top != self){8 c: n5 d' r+ x" I" {
- location.href = "http://xp6.org/iframe.html"; * @0 g) Z3 k; ~6 {4 t
- top.location.href=self.location.href;
7 t* y4 @" D m1 `" r+ r, J0 Z% X - } 8 o7 d. q, D8 ]: `
- </script>
复制代码
" Z3 h1 Z3 i5 K& h1 V! a将上面的代码复制到需要屏蔽页面<head>里面加载。" i& q" x( D; ]& ]" c) e
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
) w1 f# J1 p. F; K3 I7 W原理:
+ f8 V/ J/ {: G3 D第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
- q- z. \; ], ~ e5 O: m$ `; o. {: @第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。. c" d8 `' o" L: r+ o' C! j
目前测试这种方法没什么问题。
# s" L% @4 H# A# r: C
3 C3 C. H; d9 ~9 Y2 \ |
|