|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
1 j# B* M/ g4 O2 j( m/ o I这次讲一下如何防止自己的网页被别人iframe。
+ @! F7 F( K, | l7 q) Z" }
/ j% w; \" ]1 o3 _2 i% i" I1、这些方法都可行,但不是太可靠。
6 n$ p) V; w9 D- ?% g. u2 E5 T2 z- <script language="javascript">
7 h5 H% |% p$ i3 `6 R2 z. A - if( top.location != self.location) top.location.href=self.location.href;' h, U8 d/ M* q( C+ t
- </script>
复制代码 或1 i5 Y" N$ Z: D$ N( S, O# F, t
- <script language="javascript">4 y, l- k, r! }5 v; x
- if (top.location != location) top.location.href = location.href;
2 l5 f/ r2 g4 O" _- B( k3 b% | - </script>
复制代码 或5 W$ O/ d B3 [$ V! @4 k8 G8 H# ]# s
- <script language="javascript">
2 K6 q, B& D1 n+ t7 w5 E6 P$ q - if (top.location != self.location) {top.location=self.location;}5 g% w0 f+ z' n0 ?" E# X T {1 A
- </script>
复制代码 或. }3 V2 P: a; ]
- <script language="javascript">8 [4 s; A$ B2 w- A7 g* z
- if (top.frames.length!=0) top.location=self.document.location;
( f4 k; j5 h6 Y* e8 { - </script>
复制代码 不可靠的原因:
% }) r+ H, _: {, L) ^, Z+ R当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。; p+ S g& c9 K3 X" F! B( e6 ?) M
- <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>+ H) @6 [) H, G
- <script language="javascript">
d- K. ^/ D7 {& q- Y/ [4 r - var location="";
8 k8 w& B6 B: K9 P - var navigate="";
* s+ H9 {6 M0 y5 I1 H: T - frames[0].location.href="";* R- L' Y4 N/ }$ I6 I$ k
- </script>
复制代码 或, A C. Y/ Y$ X0 u
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
1 u; ~' H5 r: y% I
. O2 D- H, I! _+ r- <script type="text/javascript" charset="utf-8">& ?% T s' j9 W2 E1 C
- 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>');
' Z5 ~& i6 e" ^$ v" N: A - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
1 y4 S+ p7 B. r) E' {" dMeta标签方法
' _3 s& f* ^4 i6 ?: K5 U0 f- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法# k& I$ z! x# A
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法& j9 |. _9 ?3 D8 N V/ J
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法# f0 O# B1 Q0 ]0 j2 C5 ?7 A7 J
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
. A( i8 _: p. t( `3 W) |.htaccess方法5 C: l2 E1 |; ]* Y" q
在网站根目录下的.htaccess文件中中加一句
/ q" \6 d8 d0 r* B: I O. j2 s- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
3 y( C, Z% R3 L/ M6 ^- Q) nIIS方法* Y/ t8 Y8 Y& c2 y
在web.config文件中加- <system.webServer>; h! \ ]% B1 L
- ...0 O" o* b4 z) Z/ {, h4 _. R9 Z
- <httpProtocol>
1 Q' e0 A$ C. S2 s4 u - <customHeaders>7 k0 {, p- X% ^0 {0 M5 l3 w
- <add name="X-Frame-Options" value="SAMEORIGIN" />
2 ]$ z/ N; y" x - </customHeaders>
( l6 I; I" R6 I4 U, Q1 O8 n - </httpProtocol>
8 R3 |. _2 C1 U - ...1 ^# s8 n4 a* G1 F8 U' t
- </system.webServer>
复制代码 6 y0 N) e! n+ _4 j/ s
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
- ^4 e- t9 a2 _: j3 e
7 f" a! G8 t* v3、推荐解决方法。
% B7 a6 K; R: K1 |/ D9 }) e' C- <script language="javascript"> " d1 j/ y) A% f# H& F0 [
- if(top != self){
4 R, W( |) T6 I! z. P9 d7 E - location.href = "http://xp6.org/iframe.html"; 9 n" q- W( q4 X0 `5 t) k: n
- top.location.href=self.location.href;; x7 |7 o7 r* D! U |$ H5 M
- }
' H% r$ k6 g6 v* X - </script>
复制代码
6 {/ I" B2 I" a" l将上面的代码复制到需要屏蔽页面<head>里面加载。
, M/ y" x0 b! X制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。: _7 b+ J! P+ s- L5 @& l. a- [
原理:
9 A3 E7 A( g e8 `$ ?# t% X1 I6 e. s第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
" D ~6 c1 _7 P, S* i/ u1 z; a第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。
3 G1 P" R, o t; }3 ?! U& N: H目前测试这种方法没什么问题。
* R8 ^" c$ n: U4 R* k) B1 g" ?+ Z6 ?/ z# t# j) Z C0 I5 C$ q
|
|