|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
3 i1 \6 d" ^ q8 E这次讲一下如何防止自己的网页被别人iframe。9 x1 c7 V0 z* c5 G
# X- f1 p! x" h! ~1、这些方法都可行,但不是太可靠。
* l' [7 S, f5 \* u- <script language="javascript">2 M& t! ~8 ^5 H8 J& U0 `, g) M
- if( top.location != self.location) top.location.href=self.location.href; ?2 K1 F9 P4 o0 p) J' T
- </script>
复制代码 或9 t4 q, N+ G3 w* ]
- <script language="javascript">
8 Q) E+ [9 Q) o, Z9 c - if (top.location != location) top.location.href = location.href;
K) B5 ~1 r/ _/ ~ - </script>
复制代码 或
9 V7 O! B7 H% l! P- <script language="javascript">( L! N. H6 w" z8 B# I( O6 ^6 a
- if (top.location != self.location) {top.location=self.location;}
2 s" `- D2 }9 @6 n, p6 } - </script>
复制代码 或& ]6 ^, d4 N4 w$ q. t5 x+ d0 k
- <script language="javascript">* h& S) l) y6 w' {6 h' G* B
- if (top.frames.length!=0) top.location=self.document.location;; K, T9 j: a4 ^- `& ]& {
- </script>
复制代码 不可靠的原因:3 E; p( _. ~& e, ^! p) u( [ X
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。4 O9 E" Q( }* X' ~) 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>" {' V' ^" L7 h. o2 @% ^8 V
- <script language="javascript">
/ ~) y! V8 E' f2 W8 @% V7 l ^ - var location="";2 k. H3 j3 Z+ y; m# O% w. ~; |
- var navigate="";
+ ?7 T$ O" j! R5 y8 Y' v5 P$ W - frames[0].location.href="";
+ Q0 U* f' V9 e% A s7 F, E! d. m+ W - </script>
复制代码 或
) [" G; C: p. S: J- z) Q- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或, G& N. D! ^% o3 o
& @) K0 J4 c* i% |+ U2 `) }+ z
- <script type="text/javascript" charset="utf-8">
& V; e Q) Q( R - 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>');+ y2 G7 s: _$ ~* G: x6 J
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
5 C5 Z2 W2 Z' i/ O% s( r) ?Meta标签方法
( T. i! U" D4 X1 v* h, Z, k4 }4 S- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法$ i' T8 _* V2 c' z
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法8 Z" h$ r# E9 C& ?
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法) U5 l x% O. ?$ n1 O5 b
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 7 o5 m% { \( d' J- }. ]( _9 q' W1 p
.htaccess方法 z+ ?3 c5 r5 g/ E8 }3 @
在网站根目录下的.htaccess文件中中加一句! n, k+ g2 K" A, \" o- Q
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 * H i7 ^ y2 s/ G7 {
IIS方法. A0 c0 ]% r9 W
在web.config文件中加- <system.webServer>
c$ w& t# M" ` - ...
2 P6 M. Z% b0 F' A8 Y0 K: e) S6 x - <httpProtocol>9 @" K% R/ u) Z3 ?/ K/ Q7 a
- <customHeaders>
" a* g3 _/ C. k% J* z$ L - <add name="X-Frame-Options" value="SAMEORIGIN" /> ) S) |% j4 e; j
- </customHeaders>
5 t7 x) W0 O3 i2 B4 L1 ~ - </httpProtocol>
. r& d, t! w' T- o - ...; d/ v6 E+ ?- `8 e# D
- </system.webServer>
复制代码 . O7 Q: u# G" R, F B
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
6 D. y* Y, l7 k. V0 K) k7 p
8 J2 D' B+ V( z3 u" G x3、推荐解决方法。
+ n/ n+ p4 L- ?+ G+ e8 C; `- <script language="javascript">
0 s) \% U1 K$ y4 a* m# c: E+ l% n - if(top != self){
/ w# l2 T% H' ~. Y% a, G | - location.href = "http://xp6.org/iframe.html"; 0 P2 {: `* t( k$ u0 }/ I
- top.location.href=self.location.href;
: Y3 m, ?$ c+ P* H: G - } 0 h# k- x) s+ n+ H7 G+ I" }
- </script>
复制代码 - V4 g" N! m- W& h1 P7 e3 E
将上面的代码复制到需要屏蔽页面<head>里面加载。
/ j5 F7 y* x4 Y! ?制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。& E; M' U! E( v' E7 h: |
原理:
2 V, x! Z+ Y* i! z第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。& f/ a* d& f+ U9 Q% \
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
" u. W) s6 J% ]* w目前测试这种方法没什么问题。
" j. u! f$ {( ?- I! T
, U6 |3 f/ h4 C9 P9 _6 _ |
|