|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
: v0 M/ k/ i9 r% Z1 f1 E, X9 c) s这次讲一下如何防止自己的网页被别人iframe。$ r: q" D: N$ ^. r! y
3 F- Q' V; f6 } w1、这些方法都可行,但不是太可靠。; \" q: U+ `( p! S8 N
- <script language="javascript">
5 o( M4 T/ _0 y: v) E$ f - if( top.location != self.location) top.location.href=self.location.href; b) r0 Q7 p, z* Y* W" A
- </script>
复制代码 或" h8 U v/ D1 ]
- <script language="javascript">) C- i$ u3 g, S
- if (top.location != location) top.location.href = location.href;
; {! L/ g9 v7 o8 I - </script>
复制代码 或
3 j! {& j4 ^! W J- }2 j- <script language="javascript">5 |" r" w$ l. _. R( ]
- if (top.location != self.location) {top.location=self.location;}
6 D/ b$ C; J4 n$ F) V - </script>
复制代码 或
% e M9 l( u) B* h' r$ r" a- <script language="javascript">. e, f% b8 C' N8 ~* A
- if (top.frames.length!=0) top.location=self.document.location;
- \1 U5 h! r* H7 d - </script>
复制代码 不可靠的原因:
. x) |! s2 T3 J& \当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
7 U% B1 p: l1 C) `9 _+ ~8 y- <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>) r# \; Q8 [7 \
- <script language="javascript"> ' e! M- s9 H& v3 n* W: s* T* O2 q% x
- var location="";
1 h5 n( g8 {( t3 S6 ? - var navigate="";- W+ W3 I+ [8 W; h
- frames[0].location.href="";! @( u7 ^' K, g1 h9 J! S
- </script>
复制代码 或
8 y8 u( J1 y2 f, [0 o% H: X, M, U- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或/ d: C6 ]2 C: e1 k
( w* v* M6 g4 ^; ]% V- <script type="text/javascript" charset="utf-8">
6 e2 F: |$ J& p8 p K2 T: } - 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>');
0 G I" |6 u' _+ f$ H0 e - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。) _1 H" w6 {0 n5 f' ^
Meta标签方法* S2 k3 }" v/ X2 X8 f5 Y( \
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
% @7 w6 O2 N9 W- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法+ Z3 `* M' ^3 ]+ b3 w
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法* ]# R9 f; F4 B' i
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
$ f; y2 i- @9 S- `/ M f; a.htaccess方法
7 b0 z/ M5 X \* o+ d" \9 [在网站根目录下的.htaccess文件中中加一句
' K: g; m5 `" L- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
# Q9 S N0 s! o% f: Z1 H3 [+ ^! HIIS方法+ L. C1 `, P' }* B7 r9 X$ ~7 p
在web.config文件中加- <system.webServer>& q0 T+ N1 E) |5 L9 n" C3 J: }, Q
- ...! ]+ y9 |$ J9 K. z6 p. ?
- <httpProtocol>
/ ?. ^; m" G( j4 i+ b& Z - <customHeaders>
1 W- \' L, d3 [1 _ - <add name="X-Frame-Options" value="SAMEORIGIN" />
9 d% l2 M6 b& y7 L0 N - </customHeaders> 8 L7 r9 h5 ?4 u+ O- o7 H$ i
- </httpProtocol> " n3 M2 ?8 K! W: n0 a
- ...
: j& ^5 t. f) W* M8 Z4 J - </system.webServer>
复制代码
% U2 k- e: @# y+ f, S7 L之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。9 |2 p9 w8 e1 G9 _$ T4 o
# s, m. }1 D' h ~
3、推荐解决方法。" y- q: }1 T3 F+ [
- <script language="javascript">
4 U% c! e2 I2 r: w" `2 b) P0 E, M - if(top != self){6 O/ o( e# ^; N; P6 C) Y0 z
- location.href = "http://xp6.org/iframe.html"; " W& ~) j- a9 B5 D$ o) P8 `. G9 r
- top.location.href=self.location.href;
! A/ k2 M3 [- R0 G% ? - } : r) s" Z4 K; ?
- </script>
复制代码 , w) U$ B# M+ f }; K) B
将上面的代码复制到需要屏蔽页面<head>里面加载。
5 {* u( ^5 q+ W% Z+ m' R, k制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。$ \7 M% D* Y! T! m- ]3 \4 ]! W. i
原理:
/ Y3 y9 e' n& y$ u8 C$ g第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
* t/ w0 ?7 X* L第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。3 u. I6 e+ R- P- b5 @' U, m
目前测试这种方法没什么问题。 q7 n6 h5 D. T8 L% ]9 h* E
$ S# Q$ n" d' k# C0 y |
|