|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
3 U: H9 @- d2 ]" m3 Y2 c9 d$ ^1 g9 p这次讲一下如何防止自己的网页被别人iframe。
" @5 {; d9 E4 }% d7 r: w* G9 z6 g4 M; c" V
1、这些方法都可行,但不是太可靠。1 Z4 g8 U. K* w5 t: i
- <script language="javascript">
; r2 I6 A1 L3 f; u$ X. Y - if( top.location != self.location) top.location.href=self.location.href;
( S& w' [. z- l3 M7 J - </script>
复制代码 或
: z! K* {8 E9 ~3 S" v3 a, V% x: R1 L- <script language="javascript">' |9 N& ^$ `* O4 p& n
- if (top.location != location) top.location.href = location.href;
# ?" t2 i* i+ v: l: S5 O - </script>
复制代码 或* A" k( l4 ~2 n7 w, j1 j9 H7 o" `
- <script language="javascript">
. s$ a2 K2 S ~3 n# W - if (top.location != self.location) {top.location=self.location;}) a; ?' w5 M2 Y4 H. U
- </script>
复制代码 或9 [- S6 B1 R- Q, V9 Z; A/ ^: B
- <script language="javascript">
) P. k3 a/ e2 d6 P1 K - if (top.frames.length!=0) top.location=self.document.location;: @; x. {4 H7 k/ b
- </script>
复制代码 不可靠的原因:; v9 \5 G8 L+ U, |5 V
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。. [3 D: Y3 U5 b' N8 ]% t0 a
- <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>
5 y2 W8 {2 C% G, x9 e - <script language="javascript">
( M. D# K3 T1 M: O% S - var location="";
0 |% V! S/ F/ [ - var navigate="";
* f% Y7 {) j4 @' @1 W - frames[0].location.href="";3 ]9 s r g4 f! R+ j% ~+ G+ e
- </script>
复制代码 或, e& }+ y3 w& c7 t6 I+ d5 ]1 P& _
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
; \# L( V8 @+ [/ W! w! H3 u& G( e+ T. r2 h3 ~* A& v+ w
- <script type="text/javascript" charset="utf-8">
; Z# o- G9 M8 w - 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>');/ A `. z& a8 w4 O- G
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。" E% n# V$ P% f% M
Meta标签方法
1 k/ M0 U- [/ p$ ?7 ?$ K1 a- d4 Z6 R- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法6 B0 M# W/ D+ H' D! A7 k. h
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
4 d6 f) S& r8 j3 n4 z: _* h- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
* z% _6 A% M( `: Y, E) W1 W- add_header X-Frame-Options "SAMEORIGIN";
复制代码
1 J2 q. _; C8 I7 Z( [, M.htaccess方法3 K6 Q8 r+ Z' M5 G
在网站根目录下的.htaccess文件中中加一句! ^5 `; q6 R# p: J
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
/ T8 Y5 r8 a" E$ G& _; |( b) A1 PIIS方法
, @* d+ Y" `* |! D' C0 E+ ~在web.config文件中加- <system.webServer>
" Y9 [- r+ |+ [* b( ~& s6 G& s: z - ...* L6 m3 y. t- z8 G' Q5 G0 J1 V7 i
- <httpProtocol>
- w& R' O; r7 A' d- ` - <customHeaders>' p1 W! k9 T" z" h
- <add name="X-Frame-Options" value="SAMEORIGIN" />
+ j ]' G& g- I7 ]7 S, M- I - </customHeaders>
, W# @1 z# k5 `5 T' V8 Z - </httpProtocol>
+ v) N/ @& B1 Z6 U6 y - ...$ o9 h" u$ U* Y
- </system.webServer>
复制代码
" U5 T1 B+ B. P9 j. S4 p9 T3 s% Y之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。7 Z6 B9 F R5 e# q6 c6 P) S
/ ~; c5 D8 V+ x1 [' ?; W, Y6 {
3、推荐解决方法。
9 B, {2 Y6 I& X: C* j1 ?8 @- <script language="javascript"> / p( S! p3 a8 Q2 @& L0 _% P
- if(top != self){
0 C# n, Z4 I% T u0 I - location.href = "http://xp6.org/iframe.html"; * M+ {7 j3 f' \, l6 o4 M$ ?
- top.location.href=self.location.href;: z4 h" s; j- y! ] q7 @
- } ; @' w: q6 x4 q, J
- </script>
复制代码 7 _7 Z2 b6 O) x2 C2 N" f
将上面的代码复制到需要屏蔽页面<head>里面加载。
( q# F' H* j5 B+ G0 u制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。 P0 q9 v7 `# N9 r& a0 J* O
原理:
+ e/ P B" u, F) x- e" w第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。8 O: P0 E0 @& Q% o
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。: a4 q' u- o( w' ~
目前测试这种方法没什么问题。
5 r0 z# ]/ L- P6 M0 `" |) P% [
; V2 Z' a. z# e7 [' e6 H& D b |
|