|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
) x; B) }; B% R! {* d2 n! A) f这次讲一下如何防止自己的网页被别人iframe。
# E& L( Y4 c9 x+ v W
0 q) P- a' |* _, B: W1、这些方法都可行,但不是太可靠。
: l$ Q9 L3 }) A. y8 x% e- <script language="javascript">0 r+ @+ l0 {1 @# D/ F/ ^
- if( top.location != self.location) top.location.href=self.location.href;; X9 J6 J/ J! f: q
- </script>
复制代码 或2 |% o- N0 y3 C" L) X
- <script language="javascript">* m7 k' a8 O) H
- if (top.location != location) top.location.href = location.href;
$ B8 f" Z* c# w; J. A - </script>
复制代码 或+ U; Z# I" {" ]1 r4 E" g( m% y
- <script language="javascript">
3 x$ K1 \ _+ N3 n0 o - if (top.location != self.location) {top.location=self.location;}, w( e0 N3 Z5 j
- </script>
复制代码 或
6 [; I1 ?) l3 |* L6 K- f' |- <script language="javascript">
8 ] `% i3 u" S. x - if (top.frames.length!=0) top.location=self.document.location;
$ b2 |2 Z' o/ C' s - </script>
复制代码 不可靠的原因:
5 `8 ]# j: H% O$ q' b$ k, }/ Y9 Q当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
* K5 k4 m+ m+ z2 \8 V$ ^$ J- <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>
' c5 _4 s+ R- g: l! Y5 ~& [ - <script language="javascript"> ' P L4 X5 e0 j3 i" P. ]
- var location="";; O' @8 V# R4 U+ j/ I
- var navigate="";% y, l9 [4 j: a, K! T! w q
- frames[0].location.href="";
5 `* H' p: i0 L/ }$ w$ W - </script>
复制代码 或* B! e" p; [* A: ?7 Y
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
1 I2 u5 e8 B' ^1 i3 e( q$ c% h1 N# C; t; B' W
- <script type="text/javascript" charset="utf-8">
& V. c, X9 \ w - 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>');! A; }* ?8 G0 Y( J+ R2 \' `+ K
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。2 m0 n. W* q% q9 x
Meta标签方法
# X& E+ `# j' ~! X- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
! ]" A) I0 x% ? j( c( ~# K- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法3 I$ l4 B$ ^* \/ n) S; F# ?
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
t5 w) l& C" A- add_header X-Frame-Options "SAMEORIGIN";
复制代码
* ?. P: _' { T2 E4 k.htaccess方法
, k+ K, c8 V7 J- v$ r$ ^8 [* P% a在网站根目录下的.htaccess文件中中加一句
% e& R% H5 M7 f4 h* p! m8 Y: M- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ( i/ [( K0 h4 v$ o+ e- |
IIS方法; c$ J; U9 F C7 S$ K ~
在web.config文件中加- <system.webServer>/ z* L7 F3 S: E( E* `. n2 U: M8 H
- ...
% H: U+ A7 X, ]2 K - <httpProtocol>
7 F& L- [6 l# _" X - <customHeaders>
% V" F- f: f4 \3 v/ D - <add name="X-Frame-Options" value="SAMEORIGIN" />
) n p3 ]. T# j. `6 W - </customHeaders>
: C' U5 N N& B. S$ a, V" k3 e - </httpProtocol> ! u. {% F4 G4 k$ o, X
- ...( B( n4 v4 U4 u; `: F* [. ?: |: u
- </system.webServer>
复制代码
& a5 K7 o3 }# m1 Q之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
# x; l/ Y, z& r$ `' B
1 Y. p D6 Z5 R* L: }2 h/ K3 R3、推荐解决方法。
+ h, }3 ~: ~) H6 O- <script language="javascript"> # P( o( v' ^# m$ P5 i' X
- if(top != self){$ a. T i7 i* f. ]$ Z
- location.href = "http://xp6.org/iframe.html"; ' H6 @2 {& m$ w: ^8 t/ ~) R# A4 N
- top.location.href=self.location.href;( K! s$ G7 K4 Q7 j6 n& x
- }
! U7 r5 s3 ^0 D y( D2 C - </script>
复制代码
4 G) |# q# {* T$ ^8 y& V% d2 g将上面的代码复制到需要屏蔽页面<head>里面加载。
5 V3 m. X9 Z3 M% \" n+ L+ P制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。1 B$ B0 q, x8 w8 x
原理:
3 X( R3 T* Z+ L第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
9 t N# k2 ~0 ?$ C# V) J/ l3 k( v第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
( P* B- D, [# Z$ }0 z R7 I目前测试这种方法没什么问题。& o7 @% `( ]$ K0 k
, }; I% I V+ ?/ n |
|