|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
, o: N* x q4 \这次讲一下如何防止自己的网页被别人iframe。
5 j& U$ N, U& W; ?! c
" X3 o3 u% f5 _' C" R+ n8 A1、这些方法都可行,但不是太可靠。) _/ j }4 U2 Y$ x; l
- <script language="javascript">
5 `5 o) z4 |. H5 m& a" E& _ - if( top.location != self.location) top.location.href=self.location.href;, _: G% d! a8 i! p! O7 @7 |
- </script>
复制代码 或
- a: C5 x# |5 t }' Q- m& l- <script language="javascript">0 E n$ B# y% ]4 g* C! I( v
- if (top.location != location) top.location.href = location.href; W* |; k) d9 O1 D
- </script>
复制代码 或
9 T9 W. a/ j3 a x- <script language="javascript">
3 G, X3 F2 B- Y s4 f - if (top.location != self.location) {top.location=self.location;}( m: U$ y* T) x8 i* [5 J
- </script>
复制代码 或
/ @5 U( T! R0 A! d9 C [- <script language="javascript">6 n m5 e( ]9 ^# ~2 g7 y) v
- if (top.frames.length!=0) top.location=self.document.location;
! S. u5 ?- j* e - </script>
复制代码 不可靠的原因:
9 N* M0 u- L+ {0 t* m& d: @& D当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
4 e7 v: C3 j' {' S; x2 w! A9 ?$ y- <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>
: y# H. R3 I: W1 z4 b4 { - <script language="javascript">
# [7 E' t+ M: R - var location="";1 H, r) Z D, ?* b/ s8 r c$ p
- var navigate="";4 p7 r0 L U! ^
- frames[0].location.href="";- A$ E y( J! e" w6 r# I) y- g
- </script>
复制代码 或2 x0 f- m( o$ X
- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或: `7 G s- Z7 I4 Z/ D/ n
3 ?' A5 j+ t* m) }* l: v7 b$ y
- <script type="text/javascript" charset="utf-8">
/ m9 [0 \7 B- Y* H; s4 b6 G - 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>');
0 ~" z" T! u0 G - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
2 o' ?2 i" X! p0 X( i" V* LMeta标签方法
/ E; L$ L- M7 K( ?. B; r- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法4 a" L) J, Y! x& P$ d; Y
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
# Q" B4 O: Q( y. z% ]3 j- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
( k% G0 L! G/ M# ^, O4 u; _+ p8 I( _- add_header X-Frame-Options "SAMEORIGIN";
复制代码
; M/ o% \, b- ?, ^! U2 v.htaccess方法+ R. t$ N" H6 u: w
在网站根目录下的.htaccess文件中中加一句' b5 y1 F$ E6 O# W8 R0 W% o
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 7 |9 ~$ q* |, _
IIS方法
( I5 ~. J0 f# p在web.config文件中加- <system.webServer>
) I" @$ E* k$ Z0 z5 H' ] - ...
7 ]! E8 L) o; [0 L+ X5 L1 E - <httpProtocol>
: P( [$ h1 f# V1 n - <customHeaders>
8 j+ i4 e9 f- ] - <add name="X-Frame-Options" value="SAMEORIGIN" />
5 K, I/ ?% ?" ? - </customHeaders>
6 K8 }, ^6 K% N1 ~: H B! p - </httpProtocol>
( p3 z9 j$ j& a9 Q+ G - ...
; n+ T7 t- K2 v% k( X$ O" t - </system.webServer>
复制代码 * L1 }8 p4 |6 a1 H& t B C
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
+ d& e) x( N; g% y, S: ~- \5 j
1 R5 J H+ R2 t+ F3、推荐解决方法。
5 p3 L6 c5 u9 R2 h% b& G' E4 T- <script language="javascript"> 1 E8 ~0 X7 E+ Y: [7 E1 Y& S
- if(top != self){$ r7 ?9 F' ~3 g) X4 o
- location.href = "http://xp6.org/iframe.html";
6 k: g! B9 c N/ s8 \2 ` - top.location.href=self.location.href;* h2 l1 K/ a( I
- }
6 C2 B' s0 A' Y1 e! L `. p - </script>
复制代码
2 P% n4 n; D- [6 W0 ~) _. Q! J将上面的代码复制到需要屏蔽页面<head>里面加载。 p) {4 y; `5 ~0 w! u% X7 J
制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
0 g/ E; b; Q4 t& U# g原理:; u! o D8 r' z9 ]" y
第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
$ @! P7 K3 d; g& X5 ~第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。4 w' o# L; i2 V' X, s* g* ~$ z1 S; _
目前测试这种方法没什么问题。
% z0 b( F/ ]3 N5 n6 \, Z4 N/ J
$ J2 C! s1 e/ Z( K" n/ w' J) N |
|