|
前面说了如何阻止 iframe里引用的网页自动跳转,已达到iframe页面的目的。1 u" M' x, _: C' S2 V
这次讲一下如何防止自己的网页被别人iframe。+ e: H9 ]( Z2 U+ R# F+ `* m" x
/ C7 u [2 t( l3 {% _5 r1、这些方法都可行,但不是太可靠。
' V/ u0 v: R1 I0 R; G* v6 g H- <script language="javascript">+ ?9 D. O/ I1 \
- if( top.location != self.location) top.location.href=self.location.href;% `$ I) i+ `9 f2 |. Q: i' J: h0 L
- </script>
复制代码 或7 t0 Q, s/ G& r% d2 G0 ?0 Q
- <script language="javascript">
! C$ f' _5 z7 f2 b; V8 d1 c- q. H - if (top.location != location) top.location.href = location.href;
/ b& s- Q6 C1 m3 U. J5 r - </script>
复制代码 或
8 O' k4 H2 X! F3 I- <script language="javascript">6 _0 W( M/ |; ^5 n& N
- if (top.location != self.location) {top.location=self.location;}
2 P$ Y( K7 S4 @8 q; b. e% @7 w" ?; g/ f - </script>
复制代码 或7 E; P$ `. e' x4 Q7 L; Y, B# w
- <script language="javascript">
; \- q& l' f# A3 z4 ?9 s5 R& n - if (top.frames.length!=0) top.location=self.document.location;" X7 X( P/ h- h" G( i( ^
- </script>
复制代码 不可靠的原因:
5 a: A4 ?: z: c* a& F% _( ?当别人用如下类似代码做IFRAME嵌套调用时,就可能躲过你的页面的javascript代码。
/ L7 S8 J7 O* h$ e- <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>
+ O5 a6 h9 y" X% n6 M' E - <script language="javascript">
% n n9 a8 n( z. b+ }. t* T - var location="";
! @1 Z, l2 Z4 ]$ c% k - var navigate="";
" O8 Q; ^, x" q6 E- ?3 T9 ~! b - frames[0].location.href="";
* \: B/ W! S/ s# w/ R - </script>
复制代码 或
7 P! z2 r; X. H9 C7 | D- <iframe src="http://xp6.org/" class="t-iframe" scrolling="no" security="restricted" sandbox="">
复制代码 或
8 b; ]% j, S% g7 y0 _& x$ Q2 w
- h8 |# |. G* V* t- <script type="text/javascript" charset="utf-8">
4 b! H* v+ m P, y6 z7 ~2 ? E: ~7 ` - 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>');
- Z/ u- B4 q3 A; Y, C& _% w: \+ G - </script>
复制代码 2、代码层次的屏蔽,方法可行,但不是很人性化。
/ w, `; F2 l `6 s5 kMeta标签方法 B- Y8 J4 C: Z$ `. v9 P
- <meta http-equiv="X-FRAME-OPTIONS" content="DENY">
复制代码 PHP方法
% V3 r# x" |/ r4 U- <?php header('X-Frame-Options:Deny'); ?>
复制代码 Apache主机方法# {, ~* e3 i$ ~
- Header always append X-Frame-Options SAMEORIGIN
复制代码 Nginx主机方法
% Q2 X* H0 n" k2 c& s$ e- add_header X-Frame-Options "SAMEORIGIN";
复制代码
, G6 H; W' Y3 I+ N6 c6 b.htaccess方法
" J2 v! p0 E% {' @. m' E8 d在网站根目录下的.htaccess文件中中加一句9 L3 k( N- d' F [/ S
- Header append X-FRAME-OPTIONS "SAMEORIGIN"
复制代码
% e! L8 v) n7 H2 X Y( G0 zIIS方法
# \, k$ A$ S! F在web.config文件中加- <system.webServer>
\+ V! e9 E' P$ |' O4 K - ...
Y# C! t0 E, g4 t. q N - <httpProtocol>( i8 a/ g& I2 ^
- <customHeaders>. b! i/ B4 u% J) y1 g0 x
- <add name="X-Frame-Options" value="SAMEORIGIN" />
0 f+ @* H+ e! |$ f# j - </customHeaders> ! t; C0 u1 Y, h5 ] ]. G
- </httpProtocol> 9 l& h, P4 ]" O3 |/ P. W( i
- ...$ c7 t2 R. k5 M- \4 l$ @
- </system.webServer>
复制代码
" ^2 w7 t5 Q0 e) l- r/ ^之所以说不人性化,是因为这样操作之后,别人iframe会显示服务器拒绝之类的信息,虽然是屏蔽了,但是自己网站也不能宣传了。
% ^ J, ~& q+ A. |- K5 L6 E2 L5 l$ @% B _9 S' z5 k
3、推荐解决方法。
6 a7 |3 y [6 a0 g5 J& c# Q- <script language="javascript">
* |1 F' R, U1 E. f - if(top != self){( I, d G% D) \; s( y( w
- location.href = "http://xp6.org/iframe.html"; 3 ?9 X5 f G& Q$ ^. y- j, P
- top.location.href=self.location.href;
5 v7 B0 p2 B1 X( F7 ~% M - }
! F" l, J8 Q8 M4 |5 @ t! w - </script>
复制代码 ' r$ G( |: P, i* p/ \2 Y
将上面的代码复制到需要屏蔽页面<head>里面加载。
/ e E! s, f7 D9 f0 t$ H制作一个iframe.html页面里面放张网站宣传图片,加个链接,放到网站根目录。
1 n6 M8 l7 S n原理:
P; D3 g- b5 v; @第一步直接强制访问咱自己设定的iframe.html页面,如果网站禁用了JS跳转,那么执行到这一步就结束了,这样即使他们iframe了咱的网站,看到的只是咱的图片宣传页。) O3 ~4 A0 r5 a0 ~( d: x
第二步,如果没有禁用JS,那么会接着执行top.location.href=self.location.href; ,然后跳转到我们的网址页面。% n8 ]4 a1 b' [4 I" W
目前测试这种方法没什么问题。
0 n+ w) J0 t) f* j
: g5 u. |& }' q2 B2 f# j; b |
|