|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
* z" p( j, y5 B( f- u8 I9 q这次讲一下如何防止自己的网页被别人iframe。; v, x- T* w" z, G
" U& e: t' S) B, A' a
1、这些方法都可行,但不是太可靠。1 K, ^1 Z' \7 F" z- Z
- <script language="javascript">
7 ?1 N* Q) T4 n C - if( top.location != self.location) top.location.href=self.location.href;
5 J6 y3 G6 d# Q+ _$ d) d* G' H k @ - </script>
复制代码 或; E* \9 q6 T9 L
- <script language="javascript">
4 F! j* E4 ~, J* a" q+ u - if (top.location != location) top.location.href = location.href;
8 W8 Y$ S: }5 v" Z* h - </script>
复制代码 或
; ?1 q8 R1 m- a; Y/ [1 d; t$ \- <script language="javascript">( J8 g5 `( R- h$ q1 |5 }$ K) x
- if (top.location != self.location) {top.location=self.location;}
1 G, I! @( g! x- f7 v - </script>
复制代码 或
3 G( J) n9 e4 p4 u6 E9 N) L7 J- <script language="javascript">
6 d; {6 u: M L2 R - if (top.frames.length!=0) top.location=self.document.location;
+ U8 k8 Q) q* G- z. c' e/ Y% C - </script>
复制代码 不可靠的原因:) i& T2 V% Z- N$ q0 n
当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。2 D9 G2 k2 q1 ^$ k0 _
- <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>
/ f. R1 J% W) R( U- H8 \ u - <script language="javascript">
$ G X _! |+ O4 I2 E! |. w$ y0 A - var location=""; \( p% ^# J' F, J$ Q, K# D1 X: w
- var navigate="";
) A6 [4 P, ?! Z8 v( `8 d - frames[0].location.href="";# D8 |! g; _6 L7 a3 z
- </script>
复制代码 或
1 w$ y8 v+ G4 Y$ A: h- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
& x8 T9 V# p7 Y9 T; i! G @: K/ i) O- [2 u h: c
- <script type="text/javascript" charset="utf-8">3 w9 ?& d, s4 Y4 Z \# t3 B2 T9 k2 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>');" i& [6 G9 k9 u/ C
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
/ y% z4 ~( T& u# IMeta标签方法
6 |4 \% }. |6 ]! f$ }- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法% ]. Y3 M0 l2 Z+ X! i) M
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
# B9 U9 `4 Y* O" @9 r- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法1 m/ C$ T/ V$ F$ V3 x+ ~
- add_header X-Frame-Options "SAMEORIGIN";
复制代码 " Z" U" F) f" u: {6 }
.htaccess方法5 A" m/ T" g& c }8 x
在网站根目录下的.htaccess文件中中加一句% A$ L. J' ?6 q- T; r1 g% o2 \
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ) l% B9 [) B, v9 [! @2 z
IIS方法
1 {8 A% B' r1 m& I0 L4 y6 w+ `在web.config文件中加- <system.webServer># E6 z1 p& \7 o5 w
- ...# `" C+ H, M9 F9 `4 u6 M
- <httpProtocol>5 Y' O* U% B3 S L1 H
- <customHeaders>. Z& a* o2 _, X' a4 i
- <add name="X-Frame-Options" value="SAMEORIGIN" /> 0 {5 m% X R$ j1 O
- </customHeaders> ! W+ Y' b& Q9 J3 s5 e! H9 \
- </httpProtocol>
5 B$ }# M; u5 x& h, H7 N - ...
2 V7 W" Y$ ?* R - </system.webServer>
复制代码
0 T% e B- ^6 K之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。' [- ~! v8 H3 n, ?+ _% p3 i
+ h1 B. o l6 l, e8 t: ^9 |3、推荐解决方法。
# [% w# r* J' V! Y! ?9 a2 M- <script language="javascript"> 4 x8 x' ?' e7 V& ?5 h
- if(top != self){' r9 N _9 H9 `7 V! M6 D% e# X* K
- location.href = "http://xp6.org/iframe.html"; - t3 X, j' w$ c3 H4 `
- top.location.href=self.location.href;
: M. v5 E4 F7 h2 J+ ~5 Q) u | - }
% |% k9 f7 ?: n0 \4 W6 @' u - </script>
复制代码 $ x c$ h9 Q G0 C8 Q/ E
将上面的代码复制到需要屏蔽页面<head>里面加载。
" H# h- c9 ~! L) x; d制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
. N$ L* v8 j- Y0 O8 r原理:4 }- ~! r( O" B3 |; W/ p0 ?8 y
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。" i9 p* O4 n1 t6 b* F8 Z" z6 N' y- z/ C+ b
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
* T) M* |* K4 {9 m目前测试这种方法没什么问题。7 v& d! P0 l7 i9 M3 ?
# s( ]6 u1 E2 \/ a$ ~1 ` |
|