|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
- F* a! _- G# Y0 u这次讲一下如何防止自己的网页被别人iframe。/ C/ j0 ^ N( W+ G
; s+ g; e ~) C6 I# w5 z& j9 P
1、这些方法都可行,但不是太可靠。, u* ^1 F1 j' f) c
- <script language="javascript">
5 a. w8 i7 p; s3 d" M' M* | - if( top.location != self.location) top.location.href=self.location.href;
' u, q3 s5 M+ \3 { - </script>
复制代码 或
# p* C/ l6 ~: G3 X* K- l: b$ @- <script language="javascript">
- K7 K. P3 f! Q, e* U4 [: u( H. z$ V - if (top.location != location) top.location.href = location.href;% z; B$ R- F2 q; S% i& T6 O- w
- </script>
复制代码 或
' E4 ], p0 L( N& w% i- N% ?- <script language="javascript">$ |, \( D2 w4 j" T1 T* p
- if (top.location != self.location) {top.location=self.location;}
E! a& q! Y7 e6 ?* L; g# [ - </script>
复制代码 或
- _4 V9 P: ~- M7 I% E3 q% ^- <script language="javascript">
8 g8 d1 i# x1 H# X% E, J% p- g - if (top.frames.length!=0) top.location=self.document.location;
7 k' b8 l7 G+ H) k - </script>
复制代码 不可靠的原因:
: ?% U1 B9 G$ e当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。( S1 A# g. D) |7 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>
/ x1 d5 K# ]9 M; H - <script language="javascript"> 4 ^5 n! z a, I6 R* w
- var location="";9 A% f; ^$ c/ ?5 Q% I8 h2 T# b0 a
- var navigate="";2 J4 N; s( C5 j H. h
- frames[0].location.href="";
* @& d6 u; x4 G6 s8 [: V: Z - </script>
复制代码 或
1 g) k5 U3 Y" \- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
2 i) U- H* M! h( D: Q& J; {+ k% {- _: r6 p8 Q$ x
- <script type="text/javascript" charset="utf-8">
/ g! G) B: ?" t* j9 D - 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>');
" d$ @ J5 J! |. g# o - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。# e3 C& w8 s* B, m0 Y, ^( K! d
Meta标签方法
$ M" s* b9 S1 Q }# Y% `0 O7 K- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
6 O$ i" [+ J; g5 p* u- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法 u& p7 P" i. l0 E+ Z
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法# I2 x$ _) C: U6 [- Z8 \
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
8 s+ Z- J/ J6 u.htaccess方法" t6 K$ u* m1 q1 E9 |. u4 x( C4 R' j
在网站根目录下的.htaccess文件中中加一句
5 K9 [% e( l% H! [9 ]- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ( A9 R% o# j7 i3 X4 I( B5 h( `1 {& O
IIS方法9 F0 Y; o9 s8 ?1 c0 c* w
在web.config文件中加- <system.webServer>
9 H9 O7 Y1 u# A# z9 X - ...
( j. ]5 ~: r4 \; E7 C. w) y - <httpProtocol>
0 @0 j) _% A. l; @ - <customHeaders>" V9 \) x4 O/ s E, }
- <add name="X-Frame-Options" value="SAMEORIGIN" />
% E) N7 B+ ^. n& ` - </customHeaders>
$ ^7 r( I% U& c0 A - </httpProtocol> " U$ ?& g# ^' T# S
- ...4 l7 p/ ^3 E2 M7 l6 Q3 Z$ p
- </system.webServer>
复制代码 ' I- U' U/ i$ ]' D( E: R9 v
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
6 Z, Z3 I! y# {# J+ U3 N
0 V) T; A; I3 Q3、推荐解决方法。* r1 k9 |6 B6 y$ X8 p
- <script language="javascript"> / g4 [7 u4 F* l( G6 a3 u3 X
- if(top != self){
3 w% O- [/ |1 {& t" S8 c - location.href = "http://xp6.org/iframe.html"; - n: i0 O% I/ n9 x
- top.location.href=self.location.href;
1 m' X( e2 T9 q - }
+ h- H4 n) ~/ k4 W4 _6 O$ x& P9 E - </script>
复制代码
5 L1 A; ?# ]$ V* S将上面的代码复制到需要屏蔽页面<head>里面加载。7 X: ^/ }% h' k* ?1 V! M' C
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
; I' u+ q) @- |0 @% k# R( F# h1 i原理:$ c. b$ G! u0 [6 E0 m# K0 s
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。" |# L+ f& H% Z$ I' }
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
4 n5 a* N/ \' C1 ]4 q4 v! E4 k目前测试这种方法没什么问题。6 s% b9 `) Z, c, r" |/ s
. E9 J) l! d# e9 f5 c- i' n
|
|