|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。- y9 |3 e) z# Q6 h
这次讲一下如何防止自己的网页被别人iframe。2 _: p( T y& i+ y7 H% q4 r" v- c" Y% |
9 {1 F4 s9 z0 D- y% Z& q/ p
1、这些方法都可行,但不是太可靠。3 ]: |. _3 k" t, p# v
- <script language="javascript">
% m) D5 J( L* ]3 o4 z7 `, D - if( top.location != self.location) top.location.href=self.location.href;
$ v* C$ E1 o% B+ | - </script>
复制代码 或
8 k) ]2 R! _- N- <script language="javascript">
" y% K" {5 p6 f$ y; ?3 Q - if (top.location != location) top.location.href = location.href;
/ A, i+ P6 Q8 x) w - </script>
复制代码 或
) X1 E9 _, b% W7 t7 [3 U' R- <script language="javascript"> }" t: ^# m' Q
- if (top.location != self.location) {top.location=self.location;}
0 I3 n8 A7 J9 B' i/ U/ A4 R - </script>
复制代码 或
. q m# F) s( |8 H4 I# r! \3 G- <script language="javascript">
' w- d3 \& \2 f( m$ R - if (top.frames.length!=0) top.location=self.document.location;
% a3 L) V+ R* H. w. n/ Q$ t - </script>
复制代码 不可靠的原因:0 |2 Q5 p0 y6 o
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
2 b# o3 @2 Z6 A5 f! A! v9 s: k- <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>
) e9 Z9 [* n& l3 F9 H - <script language="javascript">
; ?' I: f! c0 f% M7 s - var location="";
* E1 }4 E. S, x# g6 p- h2 M - var navigate="";! h* y6 M; {3 V3 B
- frames[0].location.href="";7 q( \6 r& b$ M p( b/ G/ {
- </script>
复制代码 或
$ G! [$ r8 p* P0 i1 v) u5 m- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或8 F+ ?, ^2 p. I* n% {. J9 h
$ j# x: c( w J! a- <script type="text/javascript" charset="utf-8">
+ f$ G1 S2 U* g# x. q- T - 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>');0 ?; T, N* ~" R* x4 b4 r I: J N
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。0 \: \, j/ F. @
Meta标签方法
v/ v6 c% Q6 T" }- [! Z- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法" p' S% l0 h% j2 p% x f
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法5 q( d% |1 V$ \1 ]
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法3 k6 P' v$ H! v4 |
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 : t" X5 t- K6 x* T9 |
.htaccess方法2 @0 [8 k3 Y1 e& C
在网站根目录下的.htaccess文件中中加一句
, }4 o; l- V3 ?- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 . o: E6 H" ~* V Q1 b' E2 T3 ?
IIS方法$ _' `4 X! u* o$ i7 A% ~
在web.config文件中加- <system.webServer>
' X2 _3 t- B; @' U! K# C - ...
6 t4 a$ p$ `/ I( T3 Y1 o' H* t - <httpProtocol>$ H3 w6 ~/ _5 E' a
- <customHeaders>
6 L- ]3 b# H) V- p$ n$ }+ S - <add name="X-Frame-Options" value="SAMEORIGIN" />
; h9 L" L1 J; W - </customHeaders>
2 X. }9 H y' F" S6 r D - </httpProtocol> ( H- V P2 @/ i: D
- ...
0 S) V5 }0 b# E4 e - </system.webServer>
复制代码
+ M) ~( m- F9 _" I6 u! C3 U之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。$ g, R: }! S) X8 ]4 M* p: @# M
" Z: ^- s) Q! g7 O: K3、推荐解决方法。! p/ I0 g* y& n& e
- <script language="javascript">
3 ]% w* e; }4 T& f - if(top != self){
9 Z3 Y9 e# @# p$ Y [7 | - location.href = "http://xp6.org/iframe.html"; # I, `- S) k( v
- top.location.href=self.location.href;. Q! T. ^/ L2 l/ a( ~
- } $ u3 F' I4 v, E: G
- </script>
复制代码 / ^ z2 [: P& G- w P& Y1 O6 [
将上面的代码复制到需要屏蔽页面<head>里面加载。
) {% `! V8 ~4 h% t1 F制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。/ o4 g- p3 @1 F, a
原理:
& a- x+ i! }# Y! D: x第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
) K |6 `1 g9 I/ E! h X& \第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。4 z$ u: }4 y6 ?! N
目前测试这种方法没什么问题。, e$ J n, ^( [2 w7 {
% F4 q: \6 Y; N8 |$ j' P' s |
|