|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。" D2 x) i( ?3 `' \" t( L8 k5 I
这次讲一下如何防止自己的网页被别人iframe。
2 ~6 K: G/ b, F5 I( h4 ` I( p5 D* n8 n% n) Q& ~
1、这些方法都可行,但不是太可靠。
9 w7 [: Q* G/ W) E- <script language="javascript">/ ~9 S5 W' J/ k4 C
- if( top.location != self.location) top.location.href=self.location.href;
# ?; s0 m( b; I7 X, C* m - </script>
复制代码 或6 H# X, @7 C5 c7 ?- g
- <script language="javascript"> A3 K3 J+ l1 {! [9 R9 K
- if (top.location != location) top.location.href = location.href;- o5 G6 ^5 W2 g; o
- </script>
复制代码 或
1 Z# J' _. a( l2 z- <script language="javascript">
! }# f+ N6 j: B% K! ?5 \ - if (top.location != self.location) {top.location=self.location;}$ d$ x/ p* p5 o" g B- P; c: o
- </script>
复制代码 或! Q5 ]+ P! q6 j
- <script language="javascript">
, j5 U& e9 T& P ~$ R7 t' B - if (top.frames.length!=0) top.location=self.document.location;
: @" W" s( D$ e' U1 _! X& N7 G) { } - </script>
复制代码 不可靠的原因:
/ |* O* v- F# C! j+ r4 D+ P5 D4 L# }! d当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。1 a& g9 Z6 ~" g: C7 }; [. u
- <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>' o# M, U" T( k1 X: p3 L
- <script language="javascript"> * @! |7 h' T3 h+ H+ n; s
- var location="";" E$ {, ~* I3 `3 q) }: N) @, ?) F) N
- var navigate="";
+ ?; B$ O% o: ` - frames[0].location.href="";$ n) _; y) j# J! C
- </script>
复制代码 或& \; u. E: `+ ^4 p3 m @% c# s) x
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
- _ z+ L. e* L$ W7 {" K l$ O
& g/ j+ O: H7 {% o+ g- <script type="text/javascript" charset="utf-8">) \3 y6 ] ^5 b
- 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 }4 E2 r8 r9 w' t, s& o+ b3 u: i
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
+ n* _" {+ [: W6 CMeta标签方法2 r* G4 Q+ c- L c3 L
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
" B# F$ {; O/ w1 u- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法/ w& M6 i; s' ^, |! I( J* _
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法5 x" S* g1 {/ B- w
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
5 D& X# P% b7 f: @# ?5 X8 c3 |.htaccess方法
/ ~7 n7 B- z2 z/ |- h- {9 A在网站根目录下的.htaccess文件中中加一句, F' W$ L- g: U1 g
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 " z3 |) t2 D9 K# Y
IIS方法
- c* K. B9 d g* W4 Y4 w在web.config文件中加- <system.webServer>
* d7 {4 P* f# H3 n1 Q - ...
! p! E# i% v0 c - <httpProtocol>5 V* ?7 X F1 l, b2 O/ C
- <customHeaders>
: g; p2 ]# \7 y5 B3 |$ B - <add name="X-Frame-Options" value="SAMEORIGIN" /> 1 x& x+ ?1 G/ X
- </customHeaders>
+ I* u# ]: z* ?; _; ~ - </httpProtocol>
& U; B$ ?; c) |& H! ] - ...* Y( ~+ W; O7 g/ }# l
- </system.webServer>
复制代码
! d( Q5 f2 e" v# m" z. f7 P之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。* u }9 s7 L) u. I. @5 E# e
: j; u, U0 Y# S4 J
3、推荐解决方法。
7 r- b1 ]5 |$ s' r* F- <script language="javascript"> $ Z$ d* y! W V5 t: H" L
- if(top != self){$ O: |/ r8 S3 W! d- b7 g
- location.href = "http://xp6.org/iframe.html";
9 y6 c) t+ u- q1 g% } - top.location.href=self.location.href;
. j& F& }0 T0 ?/ S: x - } # M* B# v+ I3 A( r$ d# {: p B: h$ |
- </script>
复制代码
& v2 O0 O8 g$ ~$ }7 i) H6 q3 Y2 q将上面的代码复制到需要屏蔽页面<head>里面加载。
" Y3 k9 u3 \ l4 W制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。" c' K: X& z6 z1 K1 A3 r
原理:( Q: K/ }+ V* H/ J! @# M2 b
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
1 e+ X/ G8 C; j) Y v5 P* o, r& ?第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
) ~4 S/ V; q/ P1 ~& p! p目前测试这种方法没什么问题。
5 n! W5 Q6 [$ {, N/ k5 h2 @+ r2 \. S g$ R; V+ S. M5 v
|
|