|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。9 t+ Q* V7 |( N4 m8 L/ T: b
这次讲一下如何防止自己的网页被别人iframe。
: O8 p$ J9 E; a; I( V+ w) [7 M
: B% l! Q7 Z) C9 i1、这些方法都可行,但不是太可靠。
9 b. Y% |/ @) V- <script language="javascript">
8 c/ a0 S7 R; @+ b# t - if( top.location != self.location) top.location.href=self.location.href;% {8 v- n# H- h0 ?3 `
- </script>
复制代码 或
6 G" U1 |/ x. z7 z; A- <script language="javascript">" Q& [5 G! p+ [- X$ [* [0 b
- if (top.location != location) top.location.href = location.href;8 H2 w& V! L9 \
- </script>
复制代码 或
3 }2 [* q4 ` ]7 _3 G2 B- <script language="javascript">
' w: J. d+ m4 V9 W, X+ A# w9 v - if (top.location != self.location) {top.location=self.location;}
+ }$ n. M. f) Q% h" O0 ? - </script>
复制代码 或, \8 ~; S5 G6 D2 Q
- <script language="javascript">
/ `+ m, s) z# r% Y; V - if (top.frames.length!=0) top.location=self.document.location;6 ^+ n0 j! ^; O/ |% v
- </script>
复制代码 不可靠的原因:
; T! _ Q9 v- b3 C6 M0 s当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
% M( j1 o, ?5 |- ?6 N1 R* 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>
9 P) L" f( f T5 L- F - <script language="javascript">
; L/ ?: j: {8 t! F- Z4 Y - var location="";
5 f4 E+ h7 O8 ?/ f - var navigate="";
) y1 Y+ w. @/ @7 _ - frames[0].location.href="";
4 d" k1 l# \$ _6 U. { - </script>
复制代码 或% o1 u( v9 p+ \5 E+ ]
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
# c. [# F' X, @+ J9 T, B
8 n, Y: h/ F6 d( q, W; k- <script type="text/javascript" charset="utf-8">( w- d2 x1 C9 p1 n- A- ?5 \
- 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>');- W: w# N1 p1 b$ M
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
/ V! p; W/ n4 }# W- M+ AMeta标签方法. l# a8 y$ S6 I o. c$ p
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
! e) r0 y2 U: j9 q3 N- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法& ^" V' W5 M3 J* Q# r- e. D; G3 [
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法5 N, A# m+ M L% b
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 $ I; d* W, _1 B" g0 `
.htaccess方法
, Q% r( ^ _2 F# E在网站根目录下的.htaccess文件中中加一句6 |* P* A F# x. o0 O
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 3 d' I7 a }. p& R
IIS方法
. C3 m1 p' c5 i# R7 \- h在web.config文件中加- <system.webServer>
" q* a# b0 V; a - ...
. A3 h9 m6 S \/ U4 I - <httpProtocol>
$ g2 a/ Z* m" }/ f7 H - <customHeaders>
, f2 D0 A& ^5 a5 ~% j - <add name="X-Frame-Options" value="SAMEORIGIN" /> 1 U6 d. W- w# `- X" H; R
- </customHeaders> ( h+ b3 l+ R( H, _* w& m
- </httpProtocol>
! K1 y$ \8 r: }8 o - ...
( v# s9 n: a/ e) R# e1 ` - </system.webServer>
复制代码 8 b" [! B& {% `/ C0 v {% i
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。$ g d2 ^; K4 @. B5 P9 D
% L/ r5 }, M+ \/ {8 w6 Y5 F
3、推荐解决方法。! e' I8 Z1 D! R( V3 _
- <script language="javascript"> ( V+ I# `* A: J0 G: T, U+ Z
- if(top != self){1 T7 N R1 `, x* i- I3 p, e+ _
- location.href = "http://xp6.org/iframe.html";
' k& G* |: j4 q, J) ^7 t& \# } - top.location.href=self.location.href;
2 o; ]2 s; }: z/ D) b6 H, s - } ' n7 Z; J1 |4 m! F8 D" R
- </script>
复制代码
2 o1 m7 y7 x- Z" v9 H( P6 h将上面的代码复制到需要屏蔽页面<head>里面加载。
0 ]$ z, {! p* c$ p) N制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
5 d$ T7 u5 `' m* ]7 o- L* E2 g原理:9 ?, l- u, b1 f
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。) V& D1 p0 z# U1 Z
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
# n, X/ Q& l5 X1 T" ]1 d目前测试这种方法没什么问题。
# d: a% |8 B7 u( B, D2 w
+ A' p R2 v: J; D0 B1 g' V |
|