|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
% L, S1 m7 K6 d! w. O) Z4 E' I S这次讲一下如何防止自己的网页被别人iframe。
! l9 H: G q' r+ u0 `9 ^
. X4 Z* C; t$ {1、这些方法都可行,但不是太可靠。6 S: n: a7 Q4 c& M K/ }
- <script language="javascript">
( U$ N' B) f8 v: [' h+ ]' K - if( top.location != self.location) top.location.href=self.location.href;
% C! g& }# w$ ]; ~3 B- B5 D - </script>
复制代码 或7 N) t Y8 ^' n' H
- <script language="javascript">! ~3 q4 d) g) m& y$ b3 Y' ]
- if (top.location != location) top.location.href = location.href;+ {0 Z4 q" I+ Z2 }5 j( f
- </script>
复制代码 或1 L4 x8 ], S5 k2 o( T6 G
- <script language="javascript">
; Y& M, _, k' m, C7 u# w; W - if (top.location != self.location) {top.location=self.location;}( g; Z7 c: I# Z$ ] i
- </script>
复制代码 或5 D* t0 K9 X" B. R) l M
- <script language="javascript">
) X* T, q% c" I2 j" ~; K* Z% d - if (top.frames.length!=0) top.location=self.document.location;0 ]6 {, `$ C5 Y3 U/ N
- </script>
复制代码 不可靠的原因:5 I" [/ ^, K! r' b/ {3 H. X
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
, T/ b2 ^: K, ^: a# 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>! C% j6 t/ R3 s( j( X1 z& U: C
- <script language="javascript"> 3 @$ w$ K2 e( R. y( t
- var location="";
( U ^' J+ I( }$ `# K3 I* v4 `& `, R - var navigate="";+ P# X) {0 p" f7 c
- frames[0].location.href="";
& D! b& b' _" a( @7 R9 B8 z+ m - </script>
复制代码 或
/ y% Y3 `' i6 K2 f' D+ Z2 F- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或; u2 Q- T& H6 v% W9 u$ P* Z
, ^" E* d: q) c2 S7 ~$ H& a/ t
- <script type="text/javascript" charset="utf-8">3 Y+ I$ c+ U+ @" }- g8 j
- 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>');3 K7 x( F/ f* N2 N
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。' l3 X( Z' b& g) `' Y
Meta标签方法2 X8 _/ N" ^' N& |+ j0 Q1 N
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法, v9 i7 W6 ^2 W7 @! c6 p3 M
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
- Z- [7 A' S" n- W+ \- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法+ k: g, k4 x1 U/ |
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 $ _( T: D& ` j4 \$ a0 Q$ L& q# E) R
.htaccess方法
0 d. I- K9 c8 a# q/ B在网站根目录下的.htaccess文件中中加一句6 V0 D( v* ?" Q2 {, V& N3 \
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 1 B' o3 h2 e2 M& q& \ y% [8 I
IIS方法
/ L( n5 d4 X/ u8 T% b- y& t1 W) [在web.config文件中加- <system.webServer>0 C* \- O& d$ t- v, |
- ...3 U; `+ ?0 x" l1 Y
- <httpProtocol>) x! m7 a0 v0 c& | }. u
- <customHeaders>8 ?0 _1 s9 C: B
- <add name="X-Frame-Options" value="SAMEORIGIN" />
. L- x/ `' {9 ^2 D. [ - </customHeaders> 2 l3 @; c9 Y6 w0 ]" f8 {" ~2 x
- </httpProtocol> ; W, |1 n5 A4 c9 w* l2 |* v" s
- ...2 n1 r! O o* Q) N2 y
- </system.webServer>
复制代码
9 _* d- [/ O! E之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。/ S9 h( D7 h2 Q3 ?0 A9 k
( K: R7 Z) E" {; m. Q) M3、推荐解决方法。" ~6 z3 g7 l" z" }6 q# {
- <script language="javascript"> - K: }' N1 a$ @' X
- if(top != self){
& i: C% n, Z( H* A' ^: x* p8 h - location.href = "http://xp6.org/iframe.html"; # n4 C* A) q; u$ l$ d Z) _
- top.location.href=self.location.href;
9 r* ]5 w( i1 K) r4 I9 I" q: F& c - }
- q$ O2 |: ^9 ?: S" X3 m - </script>
复制代码 6 R2 {% {- S% e6 ^ s
将上面的代码复制到需要屏蔽页面<head>里面加载。
7 P4 |! v. m+ a5 a, s0 F7 Z制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
6 h1 g, C h8 c- Y& y, Q原理:
! ]* w; `: h' `. f第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
* Q- |* ]5 A6 ?. P' a$ Y- {: c3 h第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。* Q" o r( W q! B! N! `
目前测试这种方法没什么问题。' A& ]( I/ \9 G! Z
5 a. ~; r8 r8 Y2 g; G" l9 m
|
|