|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。/ `& Y8 T/ X) C$ j: L2 @8 C! \0 i
这次讲一下如何防止自己的网页被别人iframe。( ~: i' h9 v- Z: p; O/ q
) ]5 }# i4 _& W1、这些方法都可行,但不是太可靠。
; X3 t% O& b/ ^- <script language="javascript">
& V) s( e( C; C2 } - if( top.location != self.location) top.location.href=self.location.href;
( M& T6 g) E0 @& k - </script>
复制代码 或+ _6 u$ W& f; S, e" b7 W
- <script language="javascript">4 d! J) }7 x$ a- @$ u
- if (top.location != location) top.location.href = location.href;
- n8 ?0 J1 W( V* v v A - </script>
复制代码 或. P T" S6 h5 Q+ L
- <script language="javascript">4 E- c* o; {- `! |* a
- if (top.location != self.location) {top.location=self.location;}+ B) e/ T' R5 P* e' Z5 F' A. Q# E. G. z
- </script>
复制代码 或. F$ P3 Y6 C4 j* N: A/ {1 V
- <script language="javascript">8 R! |+ ~; X+ r" N
- if (top.frames.length!=0) top.location=self.document.location;
|; _4 C8 T( M" q% p4 U - </script>
复制代码 不可靠的原因:
8 Q n3 A+ H$ u; p9 @1 j* A, _当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
7 X5 m9 t! H. L- ?' k- <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# K: x! N- a$ M
- <script language="javascript"> % s5 t3 C; ~' p$ i. Q$ Z
- var location="";
$ g6 P; J0 [; P# p4 V - var navigate="";
3 {9 ^& I3 [2 H1 w F/ | - frames[0].location.href="";
7 t" x8 h4 }: N! ?' ~) x - </script>
复制代码 或
6 c, ~* y! f+ Z- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
- C) O# |! Q7 Q% l Z2 `# |: m, J% O: l8 j
- <script type="text/javascript" charset="utf-8">
" b) z% w; W8 [2 L - 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>');
1 F7 }' n# p" F4 O) D3 M - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。1 H; I8 k- s2 [& ?0 `0 F
Meta标签方法/ i/ B: O" ]4 r$ d, P e# m
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
, K! P% }; Z) I; n- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法) F1 z! ]( P, O z
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法0 _3 i- D$ T: H. L5 h4 D
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 ( ~7 L- V( H" g# W1 ~! J9 ~
.htaccess方法: x. f" j$ F! m; m9 \) l& `
在网站根目录下的.htaccess文件中中加一句) V3 Q$ m) d) Y5 V D
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 6 K# f" D! t- L" l
IIS方法
7 }) ~' j& k5 L. i" O, P在web.config文件中加- <system.webServer>6 H# l! E ~4 {( v
- ...
# `: I. r5 v; C/ {1 Y, } - <httpProtocol>( u# U( Q: p! A- B
- <customHeaders>9 x- _) [5 ~' k) x. L
- <add name="X-Frame-Options" value="SAMEORIGIN" />
2 T# ?$ ?! z1 x+ W8 ~/ b# c - </customHeaders> , H, P! l+ n) t5 I3 ?# {: F
- </httpProtocol>
3 D6 c$ T# e) Y+ W - .... n) D" f2 P* W/ Z
- </system.webServer>
复制代码 6 e* J. D. y ~& |/ @6 S
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
: ^+ ?, E2 C, C8 u, D. E2 N/ b7 t, [. Q6 c8 G
3、推荐解决方法。' Z9 K7 `4 n9 O' d8 h# ~8 Q) d9 ~
- <script language="javascript">
% _0 {! M+ f7 Z) w+ H - if(top != self){$ F9 w1 k: o9 Q N
- location.href = "http://xp6.org/iframe.html"; 4 S$ N) |9 s$ ~: [7 ?
- top.location.href=self.location.href;( h9 t K; U0 |2 f1 V S9 e
- }
. U5 e* x ?' i5 |6 g# G" C - </script>
复制代码
! n+ X" h: e9 b, S将上面的代码复制到需要屏蔽页面<head>里面加载。, v2 _$ n5 T2 F- Q4 X6 T
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。: S" P4 a. I Y, H
原理: a, n E& q3 n- F% d# X
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
5 a8 C6 ~, ?0 z% o% F& f第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。- f; P/ R! }& p9 g0 z9 R7 b2 ^7 m/ H
目前测试这种方法没什么问题。! f1 A9 L# _/ _# o6 p& |( j9 B1 ]; n0 n
5 s8 c/ j9 r9 |& P
|
|