|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
1 ?1 J; C+ s2 v. C1 V/ ?+ D, x6 r这次讲一下如何防止自己的网页被别人iframe。
% A7 N4 n5 m* y3 n/ z+ m3 C' T, A* n4 A
1、这些方法都可行,但不是太可靠。
5 _- a, x$ s7 }6 f4 ]% z- <script language="javascript">" A, j3 ^- R& ?+ k- R6 D
- if( top.location != self.location) top.location.href=self.location.href;! C* q! T- v4 b: r& P
- </script>
复制代码 或
5 y8 i( u* M, n- @; R- <script language="javascript"># D3 O b# `1 o f1 D R* I# m
- if (top.location != location) top.location.href = location.href;
4 c) T; q7 I V8 f( P% t - </script>
复制代码 或
* J% |1 z" C/ e+ X2 _% ?- <script language="javascript">
+ y/ Y' S6 Q' A5 p- a6 [ - if (top.location != self.location) {top.location=self.location;}5 w; Y0 A7 E8 ?( S+ p& H
- </script>
复制代码 或
4 d5 Y$ r2 y# x- v( w- <script language="javascript">0 F3 z7 d/ _# d2 | _' v
- if (top.frames.length!=0) top.location=self.document.location;
$ l b7 f2 O- z - </script>
复制代码 不可靠的原因:
& ^$ E- Y ]: U8 Z当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。4 W5 z3 W6 k& v4 Z$ T+ ]
- <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 }: x' J" z$ d3 |" w - <script language="javascript"> ) O1 @5 K8 k! {# w2 J( Q
- var location="";, ?6 ]+ N$ P* q3 A# M5 d# f( r* q
- var navigate="";( K( w% ~$ A9 D% c! C% X
- frames[0].location.href="";
! j- L" n3 ~( y; D% h) s0 k - </script>
复制代码 或
' F9 R8 s7 [5 H" A1 z- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
! ?5 y* }- S! ?
4 U, Q( c. _0 M( f( o' U$ A! q- <script type="text/javascript" charset="utf-8"> T! z! n+ D4 `+ P
- 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>');
# |3 P; u( `8 S5 ^. ^! M - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。" M0 R( d: I# |, G# m0 Y* N) E
Meta标签方法8 z5 p7 M2 X; W/ e2 c* ?
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
" F, w i+ Q& N' @: g- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
: R8 `& N( b* h# f6 L- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
% g- D+ S" w( r% V- add_header X-Frame-Options "SAMEORIGIN";
复制代码
; ]- D, G, T9 @# E, o! R6 ]" T" }.htaccess方法
8 p) m: p A: O& v" q- K$ d6 o在网站根目录下的.htaccess文件中中加一句
" c' `( L6 B2 J. I& [- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 & U5 s4 z& g4 @
IIS方法( s! E8 G* {% [5 @* n0 Z) M3 N
在web.config文件中加- <system.webServer>
$ P% D4 t6 V- p" L- h" d. p" ^! A - ..., B: v! D' N# M6 P& p
- <httpProtocol>
& x0 H. X& w' Q# v! f% I - <customHeaders>
. ~- }. ^) d* @: @ - <add name="X-Frame-Options" value="SAMEORIGIN" />
- \( \- f3 L3 t' S1 d1 Q2 U `& J - </customHeaders> + a4 B* q7 p+ u6 m0 m, V
- </httpProtocol>
) t7 L$ {7 F! W. h - ...
8 e0 \9 Z8 ?" F- p$ w# i: w - </system.webServer>
复制代码
* g" x, m7 P+ C! b之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
B" A6 l* D: g0 S; u2 J9 }% M
+ f" A2 K" n* t3 I t2 [3、推荐解决方法。
" A/ o) [1 \; W% r& t8 Y' r. B- <script language="javascript">
3 l, G- ?" E* ]# @& p - if(top != self){
2 R0 \# o: T" M, S$ v% }4 ? - location.href = "http://xp6.org/iframe.html";
5 o3 D3 g+ M- T5 R- m - top.location.href=self.location.href;
. z$ A, e$ N' P' d' E - } ' O* u0 Y4 o3 E4 w+ Y
- </script>
复制代码 ( a% l' W2 a( l# |9 |/ l
将上面的代码复制到需要屏蔽页面<head>里面加载。" }5 Z& A5 ^1 D# i7 c& N" u
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
H0 b) e$ m# D' L% c' r原理:$ x, t. Z* x4 j; o0 t) ]. N$ F
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。! \& n3 D9 q, ~+ A
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
x9 ?, E t8 P* m! Q4 W目前测试这种方法没什么问题。+ a$ v/ b. v' ^( s# q- B5 ]' |5 p1 Z
, E- Z5 e {! R( Y4 M' e c
|
|