|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
. ~. _5 T! E, S7 x: J$ v这次讲一下如何防止自己的网页被别人iframe。5 J" m! J5 n) B# F' K
$ ^/ h1 F& ~1 P4 _, s
1、这些方法都可行,但不是太可靠。* H, }" S' W" a. f6 t) T
- <script language="javascript">
# R1 U% q& F8 p/ Z( q - if( top.location != self.location) top.location.href=self.location.href;8 _3 Z6 w$ L7 v
- </script>
复制代码 或
2 O( ~ u* D c9 a- <script language="javascript">
1 M3 M0 x" r+ b5 N. [; m - if (top.location != location) top.location.href = location.href;
! \8 m1 ]' B0 [+ B, D - </script>
复制代码 或
2 V$ ^9 | g6 R- <script language="javascript">: c* l1 B2 O% S! x* d
- if (top.location != self.location) {top.location=self.location;}
+ n- D0 F/ q, r* e5 V8 I6 B - </script>
复制代码 或
" t& i3 b( v2 i% R+ g3 k* v- <script language="javascript">
( ?8 O, X0 |1 u- p8 T0 z7 [% E3 k - if (top.frames.length!=0) top.location=self.document.location;5 ?1 V" C& @$ n; V/ b
- </script>
复制代码 不可靠的原因:
/ g, x( g* t+ _: J当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
P0 P4 c! m# s- <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>
- C$ ~ o- x* N* w8 \9 N! ] - <script language="javascript">
+ T) m. n+ n3 z" \! W6 P - var location="";0 e5 L' |0 R9 ]8 x3 k9 n! u
- var navigate="";* s1 Y* l/ |# y; D9 h$ S# o: G
- frames[0].location.href="";
& C2 J: U! S* F; B9 \7 b) e. w& g. f% D - </script>
复制代码 或* [1 b- h) A: V) K1 e
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或2 G" ? M* P: Q9 e" }
& D4 D: Z7 a1 w' [! K7 B3 f- N! r7 M" E
- <script type="text/javascript" charset="utf-8">
1 L' u3 ?. r9 O: H% A! Z' Y, f' X. _ - 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>');
2 h" U. o1 i9 v - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
8 u7 p I+ G4 Q# m( J2 O" P- w5 EMeta标签方法
* K, ]: U O$ ]- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法! t7 k, n0 R: O/ F0 B! X
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法5 P }) D% H3 a$ ~
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法 `1 w8 N. ?$ K$ ]6 y7 n& @
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 1 k: K0 a. q6 P! h- W
.htaccess方法/ Q' j8 b2 Y) [' O; K
在网站根目录下的.htaccess文件中中加一句
b- [5 {$ M8 I# p L+ d- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
* [+ y' a, G2 H( X% sIIS方法
- {6 c7 L$ {( I在web.config文件中加- <system.webServer>
' C7 l8 A9 Q& T* t7 } - ...
; v W" ]8 K ^- ] - <httpProtocol>
) c+ ^& \! I4 s# V: u2 L- Q3 f) v - <customHeaders>1 T$ a' \: ?( a- l. t
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 1 X1 c4 I( v! Z- k- w( M' \, b
- </customHeaders>
5 f t* R1 A) b; {! U - </httpProtocol> + [! t9 K q8 [
- ...# o5 q) c$ v V8 _
- </system.webServer>
复制代码
; [ l3 f5 I1 H" L1 P; _0 ` ~之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。1 [" D6 E+ x3 h: g, J! Q2 ^
* V! f( o+ G3 g5 B1 f3、推荐解决方法。0 t5 R) ~$ ]4 I; k. V
- <script language="javascript"> + E/ u" Z6 R6 ?
- if(top != self){0 [- U. m& \0 G4 _5 b
- location.href = "http://xp6.org/iframe.html";
! o: L" A0 p$ _" f! e9 p - top.location.href=self.location.href;8 f2 t+ C. [9 l1 v9 J
- }
0 A3 S- N' K+ }* m+ y, M V - </script>
复制代码 % o1 p- A' e/ J3 ~4 @; Q
将上面的代码复制到需要屏蔽页面<head>里面加载。9 y: b5 h& U$ d4 P) a2 Y5 R% ` Y1 p
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
8 z: u2 e0 Q, y( c5 E原理:
3 s3 y8 C" |% E: {5 T- }; R第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
1 m& u( S1 t9 f. E. r, f第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。: H( @* M! E# m: p1 V5 z" c2 i
目前测试这种方法没什么问题。
' I4 |) Q, z; w# i1 J& ?! f/ j6 Q z* J9 F4 t! a
|
|