|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。 r3 V8 i o& q1 \7 U5 D
这次讲一下如何防止自己的网页被别人iframe。4 M5 Y* X6 P; l0 G/ ^2 j
1 C0 ~. ^2 R8 j( l1 H/ r1、这些方法都可行,但不是太可靠。. D/ ^% D: T$ X
- <script language="javascript">
M4 k: l' t1 w$ W: a - if( top.location != self.location) top.location.href=self.location.href;( S+ ]& B) m% H y& }' @
- </script>
复制代码 或
+ x+ E1 ~! b. i5 F. V- <script language="javascript">8 v, Q6 o6 x$ \/ Q; p; U7 S% n
- if (top.location != location) top.location.href = location.href;% [* \% O+ G& N5 a" F- B
- </script>
复制代码 或$ C6 i; h% ?3 I% t K7 m5 }
- <script language="javascript">
* y5 @" F- s ~$ Z; {5 b/ @ - if (top.location != self.location) {top.location=self.location;}, ^+ Z5 C9 |- L+ G- [
- </script>
复制代码 或& d; ^; [" |, Z" y* ^! t
- <script language="javascript">
) o8 u* L: s; R7 R$ _, }! b - if (top.frames.length!=0) top.location=self.document.location;& j# j# Q+ k M) F
- </script>
复制代码 不可靠的原因:& d" n3 e7 w8 R
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。1 W2 W# \9 u4 e- i9 R/ 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>
$ P; u% b; l ]. d' g% _8 q - <script language="javascript">
3 R8 q+ J% z$ e: e% ~ - var location="";( u; h" Z- ]2 e4 }# j9 M5 s7 F
- var navigate="";0 K; k) W( Z; D' t
- frames[0].location.href="";# P' h N9 o$ v+ l
- </script>
复制代码 或
" D+ u& I7 H7 V9 L" L9 K. V- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或+ q/ ]/ ^$ m( W* W" }
$ }/ M- w9 f" H2 s- o4 [2 N3 V- <script type="text/javascript" charset="utf-8">
/ \$ q; r- ^/ u# W, x8 W - 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>');; y# R: |, K5 N2 R9 j. }) A2 X! F
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。% t* I* p9 J6 I0 N; w0 o
Meta标签方法 s0 _# c5 h, ]7 S8 T3 p$ o
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
8 Q5 i+ i" o/ i% z! \" `- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法9 O% T6 i. u2 Z; ~7 g4 `
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法2 g. s+ J% u) l3 O. f8 N
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
5 ^9 k& I& J: S.htaccess方法
( h5 p6 G: @- e' J7 c9 g9 l6 P在网站根目录下的.htaccess文件中中加一句
) {9 @0 h4 g# O2 K. ]1 L# [4 g5 P) X- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
R- r0 }6 W" S, o/ o2 J# hIIS方法# P$ o$ D. ?- }
在web.config文件中加- <system.webServer>
/ i/ n% \5 M3 e; h - ...
/ a+ C5 n9 Z" O; p; k - <httpProtocol>3 c% D) J! @4 i2 n2 y7 r, Z) `2 {5 `& G
- <customHeaders>% e s4 y2 T/ c, I& w
- <add name="X-Frame-Options" value="SAMEORIGIN" />
/ R W3 N9 w% x# o- z) ]5 R$ ] - </customHeaders> 3 o" g5 W( _3 G1 t8 ^) v% m
- </httpProtocol>
( G- `! H4 b1 F/ W9 j q6 l5 \" v - ...
* b7 o. C( S, f) e* \3 F/ f - </system.webServer>
复制代码
; Y& A5 Y, k, }" J之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
2 Y* W4 j( a- ?5 o/ e: U" W! v8 A
2 E4 E" _% P: D3、推荐解决方法。
) ^' V7 f8 U u& I& W1 y) f- <script language="javascript"> $ o$ {6 v' Q9 G+ X- c* a) X& V& e0 y
- if(top != self){
" h4 [; n4 w: r- I1 c/ e - location.href = "http://xp6.org/iframe.html";
4 J- r( Y9 }4 d1 i0 h# K# Y+ G - top.location.href=self.location.href;
$ |3 [, l: K* ^5 S* u - }
1 r I/ X8 J: E" c3 z2 t/ B - </script>
复制代码 1 Y6 e' P8 X2 S5 h) M( R5 I
将上面的代码复制到需要屏蔽页面<head>里面加载。; F5 m% f- v7 {4 ~+ E t9 V) j' b
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
, l a/ [0 ^$ B" R2 M* r7 D W原理:
# e- h/ \& d# W: `第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。5 [) W' Z, t2 D9 I, w- q
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
7 O7 |0 o0 u% ]# q8 V& Q0 s目前测试这种方法没什么问题。
: @; E7 c$ F5 i9 |7 b+ U% H# S
% I1 R+ T( v9 K |
|