|
|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。
) N' Z& k% ?% _. H7 g这次讲一下如何防止自己的网页被别人iframe。$ E+ N/ o2 @7 I( a5 j( F. j% I
; R: l% O8 D* e! }/ y" i* D# e1、这些方法都可行,但不是太可靠。
$ x5 e* c/ m9 f% h% s- <script language="javascript">
$ O) l; O: U5 r2 i" U: w - if( top.location != self.location) top.location.href=self.location.href;* L* M: ]- C! B+ I
- </script>
复制代码 或
. e* U3 }) Q; C& {' i3 K7 Q3 N) s- <script language="javascript">6 b, A4 q& w, V: x5 Y: h
- if (top.location != location) top.location.href = location.href;
+ X) s2 \# k9 c' z; y2 G - </script>
复制代码 或
, [& f4 w" r6 _3 e9 r- <script language="javascript">
( U/ q. @% T$ T: f - if (top.location != self.location) {top.location=self.location;}: r( a: R& h# _, [
- </script>
复制代码 或
) r5 F1 y3 R7 [* c% b& A- <script language="javascript">; P, H+ r6 ^. r$ i! Q' q
- if (top.frames.length!=0) top.location=self.document.location;
1 F4 N) d5 ?( d+ w - </script>
复制代码 不可靠的原因:
( G, ]. ]8 P/ U' `当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
+ P# a3 S2 s7 D5 L# |- <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>
; @3 Y8 o1 s$ W" Y; t3 o. H- W - <script language="javascript">
/ p. r) ]0 V& C7 T1 c - var location="";' I* i: {8 N. p: G5 v& J7 t
- var navigate="";3 {& b3 b5 k2 v
- frames[0].location.href="";
3 z7 \; g q. h% ~' y* i - </script>
复制代码 或
( F! ^- c1 T6 i+ r6 t% ^! ]- D1 }- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
& h, ]% s, V8 r& R% R# a
# ~" i5 T7 }4 C5 i. A" W- <script type="text/javascript" charset="utf-8">
' p$ ~5 I5 V4 u' V$ m - 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>');$ U" H, |, {# g3 Q: q. `
- </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
( F! J3 P) |6 J, kMeta标签方法
! b N1 |- V* I# T" i; [5 r1 C- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法% C7 |- K5 p$ ~# I
- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法
* s# U* V# r% n, I |: j- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法$ P" I: E$ Z" x0 ^1 U
- add_header X-Frame-Options "SAMEORIGIN";
复制代码
. ? O8 O T7 i0 S% \) N, v+ X/ U2 [.htaccess方法- w+ f- P( l( ^% }
在网站根目录下的.htaccess文件中中加一句" ^) N' B0 s+ e
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码 ' I/ Y, q s5 s( r! c* ]' n
IIS方法
2 k8 U2 t8 d6 i; v3 \% Q在web.config文件中加- <system.webServer>3 ?" p$ v- P& H$ J8 @
- ...
) r( X6 P4 p. s' o( M - <httpProtocol>: i; P$ i3 o. E) ~
- <customHeaders>
: X$ F& W) {$ m. Q' ] - <add name="X-Frame-Options" value="SAMEORIGIN" />
; K0 ^# r# D0 p7 D& R2 n - </customHeaders>
) K5 L% Q/ W0 h1 [5 U0 } - </httpProtocol>
" q9 u( B- i4 z3 m/ j D" }' H - ...
9 H$ o: U& G7 z0 g! [1 d/ A - </system.webServer>
复制代码 , C7 X( _8 c; w& e
之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
8 ?$ ^8 {$ z; C: q/ q% M$ P, r7 V
' B* W2 ~/ N3 U3、推荐解决方法。% O1 {! _$ N4 `. @! x
- <script language="javascript">
) [% A" @$ R0 b: S. Y - if(top != self){
8 c; p0 A, u' h: W' [! ] - location.href = "http://xp6.org/iframe.html";
/ u8 C1 B& y5 e- Y7 }9 R1 C$ H - top.location.href=self.location.href;6 p7 q! H6 M4 w3 g/ H! p+ Q: z
- }
" R6 F2 C& h9 h5 @, _" i4 z$ R - </script>
复制代码
W: P8 H' N: l将上面的代码复制到需要屏蔽页面<head>里面加载。
6 W E8 B0 Q+ w( k制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。+ V( R9 ?3 s/ R6 q- `9 |4 t4 ]
原理:
$ i1 {- T) ^+ P第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。
1 I7 f; C7 I# H' z第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。2 _$ Y2 t( Y7 {
目前测试这种方法没什么问题。3 a& C2 X, t8 j% X
: D9 ]( B$ Q; X- U1 Z |
|