|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
F% ]# u3 \2 p7 W- c这次讲一下如何防止自己的网页被别人iframe。8 K; S, ? e$ @4 x! ?2 ]7 K2 l8 D
0 Z+ b4 ]& G w1、这些方法都可行,但不是太可靠。
3 R- Q$ \. M$ Q& g- <script language="javascript">$ ]1 ]9 k9 Q+ D2 g7 H' e$ o
- if( top.location != self.location) top.location.href=self.location.href;
& K4 C8 V5 n; w: P - </script>
复制代码 或0 c, r. i, L/ O" D
- <script language="javascript">
# g1 g3 W$ W: u - if (top.location != location) top.location.href = location.href;
3 L' l6 h- J8 Y - </script>
复制代码 或$ Z, G" Q$ a0 X# h- s* }
- <script language="javascript">
3 y! ~. a Q( D) s - if (top.location != self.location) {top.location=self.location;}' {! F. z6 a' U
- </script>
复制代码 或
! z; L9 o6 m! B, a8 d- <script language="javascript">
8 C B f1 E: j' J$ f9 \) I - if (top.frames.length!=0) top.location=self.document.location;
! v3 I8 b: f- G( ^" z4 h - </script>
复制代码 不可靠的原因:: j9 f/ R& b7 j5 i
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
9 T' @; W: ]" h. S4 J; 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>
+ J: u0 Y; C# X8 B1 u - <script language="javascript"> $ f1 n' h$ |- x. J. Z* F9 f
- var location=""; w( z/ f4 M5 S& @5 x
- var navigate="";4 k1 r& @0 u0 u9 [
- frames[0].location.href="";. E' M# S0 M- r' R6 O9 S Z
- </script>
复制代码 或
# `$ r. z! _- I& F% Z0 X- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或. ^, v5 J9 V7 W, r( N
" c/ A1 d0 q3 A8 ?2 _1 T- E% Z$ v" q* ^- <script type="text/javascript" charset="utf-8">
! s- Z* k k" [ - 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>');
' G9 o5 j$ S. p5 q9 ^5 { - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
2 ]$ k( C+ N. F* L3 h k( L4 G; gMeta标签方法
8 y1 n5 c2 B0 \5 R5 N! C& i7 A$ _, ^- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法4 E% T0 q: r7 O# i
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
% y# F8 K' D; O; X; o+ K7 z. |: Z- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法6 _" ^; H) l {$ d' V: ~/ z
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 1 b3 l2 b/ S( v) O, A: X
.htaccess方法" ^ U4 a" E' y/ ?
在网站根目录下的.htaccess文件中中加一句
" V5 `( d$ Q6 ]9 d2 V' V# F- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 % |6 ?# h1 M* A
IIS方法
& V0 K& ~. n y% _, L/ o在web.config文件中加- <system.webServer>7 t" V5 z' y2 R( m7 j% Q( p8 O/ E9 C
- ...
% l C7 P& @; U - <httpProtocol> p/ ?+ K" i* H& v
- <customHeaders>" P' C& @% O+ b1 n! v
- <add name="X-Frame-Options" value="SAMEORIGIN" /> / a% G, n; l+ e9 |1 H" g
- </customHeaders>
: w4 ?$ |8 i" m" n/ K# n! ~. p - </httpProtocol>
4 r# ?* g6 {. V% Z# T - ...
- A" O& d& H) f2 X+ i - </system.webServer>
复制代码
" O- b4 @. g* Y9 k* } j之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。+ e9 M0 d* g6 C! I2 L! T3 N
, u* j' N# I- r9 e3、推荐解决方法。
9 {$ \! v/ ^' m2 T6 |& _2 }- <script language="javascript"> : Z& n$ O8 F2 `$ {9 \- _4 u
- if(top != self){
3 ~! F* Y/ @. t/ h - location.href = "http://xp6.org/iframe.html";
. ]3 e7 u: Z" k% M - top.location.href=self.location.href;
! S; J/ V0 s; ]! w0 b* b: i0 g - }
: C5 C# R: a& y c: M - </script>
复制代码 * b& S3 J7 ]5 v) m
将上面的代码复制到需要屏蔽页面<head>里面加载。. }/ T/ }7 K7 M# a
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
( p- L8 p, ^9 {原理:
; k/ g. j6 @1 d1 | O7 Y/ P! z第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
6 o4 C' T, A0 x1 Q4 D2 S1 O, r第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
) f+ L* n* e1 N& G6 K7 ]目前测试这种方法没什么问题。0 m2 g3 @6 i `) |$ B+ {
& Y0 G: u1 B$ [4 [5 K* ^
|
|