|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
+ |: Z, L! c3 ?这次讲一下如何防止自己的网页被别人iframe。
* e1 a, [! e: u5 H3 o/ m4 E6 p3 i
4 P. r _/ `9 G {1、这些方法都可行,但不是太可靠。& ^& C8 D8 i: X9 W* N6 q% L3 S% {
- <script language="javascript">5 V: o4 R" C' q- B7 g: h$ y ]
- if( top.location != self.location) top.location.href=self.location.href;7 N, r/ I w4 G: R& X- ?+ `
- </script>
复制代码 或
- T& P! E: ~7 L; _7 [3 o8 g. k- <script language="javascript">8 t( ]( i' J, c/ v
- if (top.location != location) top.location.href = location.href;
0 a/ l; j6 y' _4 w# d5 G( G - </script>
复制代码 或
: T7 T( X8 [& b$ z* e: ~- <script language="javascript">, ] T- Z+ S) o; r9 w
- if (top.location != self.location) {top.location=self.location;}" d( [& \- i( O6 V$ z
- </script>
复制代码 或0 Y2 e( y9 \( }) H. Q q1 {
- <script language="javascript">0 F% U" Z$ [8 H! H8 g ]
- if (top.frames.length!=0) top.location=self.document.location;
9 |' H- U) Z) Y) a9 z) @$ R/ e - </script>
复制代码 不可靠的原因:# f C- d# S$ y( V, y0 X
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。: _3 C( U- v, s) q0 q% o
- <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>
1 |: f: ?: e' \" e$ N8 _. Q, ] - <script language="javascript">
$ Y# S0 i/ y5 ]$ C - var location="";4 N$ o# c8 `; q1 r- |
- var navigate="";+ A! @" K5 M; P( O) t [
- frames[0].location.href="";
) i. l* Y. h, x - </script>
复制代码 或9 v n) @9 [- N* }4 J% I/ E
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或9 M) A' k% e Z& l6 Q( A/ _
4 ` x" z5 v$ _/ Q$ e/ A% S- <script type="text/javascript" charset="utf-8">
* O4 `4 Z( T, D3 h9 L& ?6 m7 e+ d - 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>');% V5 V6 _: B. G0 Z$ P
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。: U( J# v- U" H" l2 F8 G
Meta标签方法9 y) a7 e7 n1 ^ B1 V
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法# u- i7 i* U$ G! H% z L1 d }) n
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
7 I+ [9 N3 x( a( \% Y* B6 Z- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
8 [: B0 H* }+ r- ]5 T8 x- add_header X-Frame-Options "SAMEORIGIN";
复制代码
4 I* Z q- A" \. O6 v.htaccess方法
9 v: q8 P( Z! X& u3 N" | q; H* Q在网站根目录下的.htaccess文件中中加一句4 r* C' L/ P/ m- \. D: s3 m4 t, X# {
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ; l0 o# C. s; T
IIS方法3 F7 k( Q% [$ I6 g
在web.config文件中加- <system.webServer>+ ?4 |( [; i- g. F: j
- ...+ W# u9 C# ^* U8 o3 ?
- <httpProtocol>
8 q m1 }- E/ O2 R, a# y - <customHeaders>
' a) q# F6 e+ F+ [- Q/ @1 ^ - <add name="X-Frame-Options" value="SAMEORIGIN" /> ( z) M* H$ D3 K
- </customHeaders> ( }8 d, }! a0 H" `/ ?+ z) W
- </httpProtocol>
4 |' m: s- A3 h - ...
* [0 x+ _4 f9 F! s+ n1 o3 n \. o - </system.webServer>
复制代码 " ^$ |4 O1 c5 G6 m7 z" R5 N
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
+ E2 v" W* ~) x8 @
/ y0 |- L% Z) R0 Q0 E6 o3、推荐解决方法。
& g; f8 r1 ]. E" G- <script language="javascript">
1 f$ I; o8 W' ~. k - if(top != self){6 {. F) p+ F0 a+ ~/ j; |9 J$ a
- location.href = "http://xp6.org/iframe.html"; 5 P' M- l. d( Y
- top.location.href=self.location.href;( w9 {2 x- m; I
- }
3 _- W+ C. u: |( Y, [# ] - </script>
复制代码 7 @) P2 W$ w& N" f% Y" z) |
将上面的代码复制到需要屏蔽页面<head>里面加载。
! H o7 R1 ?0 F, v% x制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
0 `4 O/ Z9 B0 Q& V( T! R原理:6 X) w' U, o( s. n" ~: j4 H/ I
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
( W2 Y5 B6 Q9 m j _0 f! J8 I第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。3 Y# b' g8 B. y0 F4 E
目前测试这种方法没什么问题。
7 B1 j5 s+ ]; p* U) V- N' W9 Y* c, [, M: F: s* W, M% q" a& S
|
|