|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。2 I H, u' c3 g
这次讲一下如何防止自己的网页被别人iframe。 X F: d& g- ~0 O( r" ^ o
6 L @& o6 c& u( x# E5 d
1、这些方法都可行,但不是太可靠。
* y- Y$ j4 z v5 w- <script language="javascript">7 w7 B. Q7 W% P. y
- if( top.location != self.location) top.location.href=self.location.href;
& W b+ c& M2 B! b8 z9 D - </script>
复制代码 或" w" g+ A; J8 n* F1 E! a9 j$ w4 G
- <script language="javascript">* f& h* [9 h5 v
- if (top.location != location) top.location.href = location.href;4 R: L$ L) U' U! ~4 `* C+ u: y
- </script>
复制代码 或
! X0 `. ^: i4 ~" x0 v: f1 l- <script language="javascript">
/ [, R* K2 ~! Z" p; p( G7 ^% t- v - if (top.location != self.location) {top.location=self.location;}. S+ ~3 x& L3 f/ @: |
- </script>
复制代码 或
. R* N$ i, N$ h" e- <script language="javascript">7 U! X+ x! t" G! Q
- if (top.frames.length!=0) top.location=self.document.location;
5 Z. T( M* S; s' ?# D0 _8 l/ Z" W - </script>
复制代码 不可靠的原因:+ c) p+ O9 w9 Z7 Z
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
- ]; e3 z1 q0 e9 T: b& E q: O. ~" ?- <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> Y s% K# L) b1 }$ m2 f
- <script language="javascript">
+ F8 o) {' `. M8 Y6 M& c - var location="";
I( G/ w1 S; d& c+ o - var navigate="";6 ^: s* a& W+ I' W4 P2 k Q$ k! k* b
- frames[0].location.href="";
/ y9 o- K1 c8 G( l - </script>
复制代码 或
9 G% ~, \1 X3 J) m; t: H- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
7 j, S0 r1 c5 H. D/ W; Q! K, c, T
4 {" r. V8 w- l/ v3 H- <script type="text/javascript" charset="utf-8">0 A3 V3 S5 D2 F* x# I: z
- 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>');# V& ~' c2 r$ N
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。! Q9 s; _+ o8 p1 m
Meta标签方法
, \: c* S& P! E- n8 O- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法- A0 N- W7 N/ s, u6 F
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
0 B$ d! G# m P" j; h) u- Q" c5 _* M- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法9 l' Z* y& S( E* Z# z
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
8 h' Y/ S; }6 H. x' H8 m.htaccess方法
6 | d& i- x' p( b9 w& p$ B; v2 b在网站根目录下的.htaccess文件中中加一句
6 F, `! @3 e3 y- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ; k5 e. H9 Q9 [% X
IIS方法9 m( A0 O8 V, r2 w" G8 F2 ^
在web.config文件中加- <system.webServer>1 @2 [4 c* Y% y6 h1 j! V, s* \, @
- ...
5 M5 R0 M" ^" M9 q- f! s - <httpProtocol>" {2 V1 f3 k- V% ^+ O0 m
- <customHeaders>
! [" C* |/ [ q6 s, [ U% l - <add name="X-Frame-Options" value="SAMEORIGIN" />
! R$ i M( P- }' t - </customHeaders>
1 x o# K7 x9 k; A" z+ B" ] - </httpProtocol>
2 [7 s) o; L+ ]+ Y' O D2 m! ~* Y - ...$ d a/ q8 U% @' h3 g |
- </system.webServer>
复制代码
# R7 A) n) a; F8 q$ ^之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。8 i4 z y, `6 ?( s! L
2 Y7 Y6 s6 {; U$ A6 B
3、推荐解决方法。
/ @" ~- J8 \ `- <script language="javascript"> $ H* e5 `$ e/ p9 h
- if(top != self){7 O- j9 x" ~3 f7 D( s- l
- location.href = "http://xp6.org/iframe.html"; + m6 ?6 T# q+ U3 B9 Y7 p" |2 W
- top.location.href=self.location.href;
+ X* c2 C; _- N4 R: D6 I( [ - } + C; `1 h/ M6 f1 q8 O
- </script>
复制代码 5 ]+ Y. y% W' c" z, n# W
将上面的代码复制到需要屏蔽页面<head>里面加载。, `3 q) J6 h# S5 B9 Q7 l9 q
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。* C0 `9 {9 l4 g( |
原理:
% C: {4 j' y9 d- h# G第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
# Q# d) @' [! C0 `- R& b" ^# e第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。+ z: E* g( I! b9 ^; g
目前测试这种方法没什么问题。
% v/ W% y) `4 [' E7 K+ n1 t2 G
: _; c* N/ n0 j; ~% {* n |
|