|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
+ L! F3 E% x. Y# A; ]
! c$ O1 j: L2 O/ E4 j- o8 F) b书名:《白帽子讲Web安全》
' g! t& \ J1 s% v作者:吴翰清 ; ~- h( f3 m& }9 `5 Z2 A
出版社:电子工业出版社! _' b: Z" Q; C" Z
出版年:2014年6月1日(第1版)! `: S: h2 Q7 |# r& X
定价:69.00元
3 S4 I- P, O, [3 [装帧:平装
7 T1 ]0 {* ]# ^ V: L- jISBN:9787121234101
% J3 C: V, J* R* G2 j/ L* a
" z0 Y O% M$ J% [4 X购买链接: Z$ B8 l! n9 |0 z0 K8 e
1 _! \9 R: H; P9 N D5 w
6 b* r, |; @0 a+ o) K亚马逊(kindle)-> 传送门& V5 p( O2 Z% E* I' p
" `) ^9 m3 N& @5 `1 }7 P
亚马逊 -> 传送门
* o" q1 w1 j: T
h( B5 a5 w8 {1 V5 r! W( i9 @当当网 -> 传送门+ }/ _# d& S8 \% g- R
- b" G8 ^( N- r京东 -> 传送门 D. k( c# w& m8 K' r7 L8 v
, j. d) v# {/ j' e
天猫 -> 传送门8 I, \, Q# z5 ~% b
5 ^* h, k' y; X! u
5 L$ s* X. {1 Z! m9 p0 Q7 \内容简介:$ N# ]6 \7 F* j
) O! c* H" X( U! D ^
5 @" v9 m! }% |: _1 Q5 n' q9 c0 w1 |《白帽子讲Web安全(纪念版)》内容简介:在互联网时代,数据安全与个人隐私受到了前所未有的挑战,各种新奇的攻击技术层出不穷。如何才能更好地保护我们的数据?本书将带你走进 Web 安全的世界,让你了解 Web 安全的方方面面。黑客不再变得神秘,攻击技术原来我也可以会,小网站主自己也能找到正确的安全道路。大公司是怎么做安全的,为什么要选择这样的方案呢?你能在本书中找到答案。详细的剖析,让你不仅能“知其然”,更能“知其所以然”。
7 M. k/ r! {, n) h! I: H0 d3 B
7 T5 d+ e/ j# @4 \. ?2 e: d$ B8 _( c# ~1 `3 V
目录: B3 m2 C( P1 J+ s! C
% a; e/ k X( q* ]) I
" h! r# r: c9 {/ ~第一篇 世界观安全
' g/ h8 ^, j, Q2 ?) Q4 K: I- V4 W5 C
. r% D6 s6 m" j4 N' m4 X第1章 我的安全世界观2 " O) I; P6 O( i* q1 w2 Z
- Z" H- V$ `7 f3 W
1.1Web安全简史2 9 v4 }- r$ J: e! r5 ^, D6 u# x5 h' j$ A
1.1.1中国黑客简史2 & R$ ~. F& Q% m( t' g) @) }+ Y* {
1.1.2黑客技术的发展历程3 8 i; w' j [, ^' ]) G b6 M
1.1.3Web安全的兴起5
: E' b8 n* s' t- A9 C1.2黑帽子,白帽子6
! A* V, J2 O9 p; k' m) X# H1.3返璞归真,揭秘安全的本质7 , ~' j7 d: Z+ z
1.4破除迷信,没有银弹9
. M6 X* B' U# d8 W1 I3 @1.5安全三要素10
$ R0 n' T1 q2 H% m1.6如何实施安全评估11 0 p. k: H% N, u( `' R1 E% n
1.6.1资产等级划分12
& @/ i3 U6 V( W. t- w/ S1.6.2威胁分析13
2 m. j6 l, X& r" K$ P7 S1.6.3风险分析14 . s+ y3 T S) G! @* n W0 f, ^: P
1.6.4设计安全方案15
8 l1 b+ a! Z! k7 c6 }1.7白帽子兵法16
4 E6 j/ ]: D' f! U2 X7 k1.7.1SecureByDefault原则16 ; S% [) L1 F, n; e0 L
1.7.2纵深防御原则18 + [. L" g/ y* ?1 o+ K
1.7.3数据与代码分离原则19 ' z! t2 S S! O
1.7.4不可预测性原则21
: A/ i; }. p- ]4 x6 T5 X. A1.8小结22
" z0 g7 g K+ H+ } c0 P, Q( j(附)谁来为漏洞买单?23 2 e" f* l9 f# K& n7 L
3 ]5 m& j, F/ B# p! ~
- s! q3 O7 @# ]& r第二篇 客户端脚本安全
3 @$ K( i" _9 b! o1 n
. r1 `- i Q0 r/ S- J第2章 浏览器安全26+ M$ p' @# C& f0 C( o
- P$ \3 L7 G- J4 n2.1同源策略26 9 \& O, O& L Y' y, P+ N- {2 J
2.2浏览器沙箱30
7 y% @. \. A" j5 }7 {) @2.3恶意网址拦截33 8 X0 l. _' j9 f+ S6 B
2.4高速发展的浏览器安全36 ( [+ }$ d8 g0 E
2.5小结39
$ p" P! }7 D' S9 j3 R6 E( |, c" V a' Y* Y s' ], E, ^
第3章 跨站脚本攻击(XSS)40
6 v+ j9 i _) D/ y3 R4 @0 S3 K6 Z# B0 I; E, g
3.1XSS简介40 + h/ @7 b* T) b4 Y1 a
3.2XSS攻击进阶43 : ]! W1 n8 Z$ F/ Y
3.2.1初探XSSPayload43
5 j# B0 ?* m8 s5 H0 \6 O3.2.2强大的XSSPayload46
: i5 C1 c0 S& o# O% r9 @( d3.2.3XSS攻击平台62 ~& P8 o0 Q$ G
3.2.4终极武器:XSSWorm64 2 K5 L" g" R9 P2 K
3.2.5调试JavaScript73
2 Z$ K3 w+ w8 H( V- U- b: Y3.2.6XSS构造技巧76
/ p0 x; _, _: i1 C8 M) I5 R# U o3.2.7变废为宝:MissionImpossible82 ( S0 v7 L2 t- M+ ~6 i1 Q
3.2.8容易被忽视的角落:FlashXSS85
8 J2 N# t# h3 V5 E1 a* R/ X3.2.9真的高枕无忧吗:JavaScript开发框架87
0 \- w- o* f2 B+ V) G* e0 a3.3XSS的防御89 ' w* \: x3 O9 R7 W
3.3.1四两拨千斤:HttpOnly89
- b% f' z$ M; f. l( U+ ~* G3.3.2输入检查93
1 `8 G. i* A! m; L0 f; A3.3.3输出检查95 , ?9 K8 D7 y' S, B2 r4 m9 N2 H
3.3.4正确地防御XSS99 + J" O- F s, i% i
3.3.5处理富文本102
& W2 Y5 A8 a5 L8 J" }3.3.6防御DOMBasedXSS103
& M. V! b% |3 B3.3.7换个角度看XSS的风险107
# T: P, c. C s' }/ g% r: t( Z3.4小结107
) G; N6 v1 p/ ^. O3 q: k
8 D) D4 |. \7 |3 t8 O1 o. y; m第4章 跨站点请求伪造(CSRF)109 + v+ @ |, }- Q
4 N1 Z6 B; z5 y0 h( R" p4.1CSRF简介109 : A4 a' ~/ [% H; u! \: Y
4.2CSRF进阶111 : y( a' R6 ~. w
4.2.1浏览器的Cookie策略111
e2 Y) [. q6 q& A- J% Q% V4.2.2P3P头的副作用113 2 s- j% o1 {# X1 l# A9 m# |
4.2.3GET?POST?116
5 N, F9 q" ?: l6 S3 Z5 e4.2.4FlashCSRF118 \; k( H' }6 L7 ^( ~* t; z
4.2.5CSRFWorm119
" z' A% n. {& @5 p* x3 [. ~4.3CSRF的防御120
6 D" c' J; a1 V; c4.3.1验证码120
7 U7 {& M8 N# @1 u a4.3.2RefererCheck120 7 F# X$ J5 a0 U
4.3.3AntiCSRFToken121
' [& ?) c0 {& F( ^9 ^4.4小结124
- c# U- ^0 E5 ^. W& ]8 V# L! Y) f! v
y; j" e" ^6 _0 g1 |第5章 点击劫持(ClickJacking)125 3 o: d, w Y% p9 ?& c0 ^; u
, r0 \" D5 `% K! p5.1什么是点击劫持125 9 X, m7 @: L& E# B: k; Z6 k
5.2Flash点击劫持127 4 D9 n/ \" R, s0 @2 u& V, b
5.3图片覆盖攻击129 " F$ S) O: l# L a' G0 b" K
5.4拖拽劫持与数据窃取131 8 V3 Y9 j) g9 G/ l0 g* L
5.5ClickJacking3.0:触屏劫持134 : R7 ?) k$ k* r9 }' ]( r A' J
5.6防御ClickJacking136
6 c8 f$ x# D8 @$ n' T, g+ @5.6.1framebusting136
, _& h" N* Y8 S8 S+ B/ X5.6.2X—Frame—Options137 ) _. F7 x o, M$ v: a, A
5.7小结138 ) S8 k4 D) g6 h, R& u; @# }
" U# N) a3 [( h0 g1 _: c& b+ z
第6章 HTML5安全139
# @' T2 S. j% h/ d9 q) c" V
$ ?, I3 ?' m) K$ S; q6.1HTML5新标签139 C, q3 g" a' s5 r! J p/ R
6.1.1新标签的XSS139
0 B8 K) ?8 _. K4 B6.1.2iframe的sandbox140 I- y: |5 f4 G+ E: t
6.1.3LinkTypes:noreferrer141 9 k. {7 \4 J2 I. u4 p
6.1.4Canvas的妙用141
( U" Q( ?7 U4 I* ?6.2其他安全问题144
9 G) A* W- q) X7 m' L6.2.1Cross—OriginResourceSharing144
4 |9 ~- n5 Y) p6 F6.2.2postMessage——跨窗口传递消息146 ( J3 X% M6 `9 e1 |* H0 L% D f
6.2.3WebStorage147 0 Q6 H, f7 z- x# B% O+ a
6.3小结150
3 L) Z% f) n, _
( F4 A* o9 A8 |; c, T5 V0 w! d% n; W4 l
第三篇 服务器端应用安全 # z6 X; M8 O H6 z0 }' {+ a
7 M1 c: w9 t! m# e% A. o% S第7章 注入攻击152
2 {' E) d8 P+ y% r% ~ j6 L! ?1 M- N$ S8 N; X' }
7.1SQL注入152 7 p7 l1 Z! Y& K' {/ e$ H! Z% x
7.1.1盲注(BlindInjection)153
- R8 d$ W1 x2 `* Q- u- l* W7 |# ?' b7.1.2TimingAttack155
q/ r9 q' U3 E- [( K: h7.2数据库攻击技巧157
! v, v! D8 K _0 W7.2.1常见的攻击技巧157 y! X, x. f) C8 R3 a, {
7.2.2命令执行158
7 f* @# h1 R, _* j& G( g3 O" p7.2.3攻击存储过程164 4 x% D9 r. |' c9 e1 n
7.2.4编码问题165
" t. J' k& V9 O1 Q7.2.5SQLColumnTruncation167 4 i7 S+ x: a2 l/ a9 v h
7.3正确地防御SQL注入170 0 ]3 h' m; y% g: v2 n& ~2 P3 y
7.3.1使用预编译语句171 ! I- ?. L! w" U1 W, [ @( a; T
7.3.2使用存储过程172 * \* @# M& z J5 Z' b5 h l
7.3.3检查数据类型172
3 _; U" ]) E3 j, G) Y3 J1 i7.3.4使用安全函数172
7 I- } w6 ]. I3 E8 h# ~7.4其他注入攻击173
6 b @3 C8 W8 Z3 A" P! J0 g5 E7.4.1XML注入173
# O1 S( M" c6 G- `# a7.4.2代码注入174 . Y# z4 z3 u# | ]
7.4.3CRLF注入176 M0 H# ~$ G& S, u# o
7.5小结179
& I/ V8 l; g- v# _* Q. f' C8 _, A' ~6 ]
第8章 文件上传漏洞180
6 l! ^# d5 @3 }
/ k& B; I; C# z7 O) [5 c6 Z8.1文件上传漏洞概述180
- |& _2 n* _% K" I8.1.1从FCKEditor文件上传漏洞谈起181 ) D/ g: m1 x9 |' `( g+ b
8.1.2绕过文件上传检查功能182 ; B" A) S% Q4 C4 w
8.2功能还是漏洞183
$ E; x1 n' H3 q1 O8.2.1Apache文件解析问题184
" Z0 L7 M, s5 ?* i& H8.2.2IIS文件解析问题185
# L# i! n) R/ B/ f2 A+ G& q8.2.3PHPCGI路径解析问题187
6 j( s5 ~% Q6 V. B$ t3 o: m2 Q8.2.4利用上传文件钓鱼189 ) z4 b# ]" d) h6 |+ D
8.3设计安全的文件上传功能190 * ^- y4 G" F+ z5 f
8.4小结191
; t' x5 u; h0 B0 y7 J
# ~' O, R9 |# y0 @第9章 认证与会话管理192
* p! u; T0 @8 ]% w
8 z) o* u# v0 F" J) M9.1WhoamI?192
# U) t) p$ y$ G* ^0 y$ Y# r/ a4 _" i9.2密码的那些事儿193
' _; n [% }' N9 J# }9.3多因素认证195
3 l1 v, i. J- @9.4Session与认证196
! x' m. r* m# o! @8 |; J9.5SessionFixation攻击198
6 a' C C- g: U/ X0 m3 @3 i9.6Session保持攻击199 8 ?; s |3 y0 I& Q( }1 b
9.7单点登录(SSO)201
$ u% H, h/ {9 H9.8小结203
T) h* s1 C% u) `1 {# Q/ H6 F) C! q3 D, {9 s% T4 _8 |
第10章 访问控制205
7 ~) Q& [5 E( x8 D# |
5 R7 N2 T9 j4 p V0 L10.1WhatCanIDo?205
3 V) R3 G4 A! Z9 o* s+ O# o0 ?10.2垂直权限管理208
3 j1 b- J! k2 u& H7 T/ I10.3水平权限管理211
3 ^9 U# \5 w, I) k& K0 c10.4OAuth简介213
0 R3 k* o0 r) B! N4 n9 X10.5小结219 / M+ Q4 L) A6 i) Z- r+ A' Z8 Q" O
5 v" v- t# I4 B* f+ J% f0 J
第11章 加密算法与随机数220
/ g0 x3 _" R4 ?0 I$ q+ |$ C8 ] i, z+ c8 z" W9 x! r. S8 R
11.1概述220 ; D9 |9 E0 t0 \8 A' T7 y h S
11.2StreamCipherAttack222
5 w$ Y; n1 ]& o# j11.2.1ReusedKeyAttack222
/ R4 U7 ]3 O/ |) m11.2.2Bit—flippingAttack228 - V6 B. z; R0 J, @( q
11.2.3弱随机IV问题230 : L/ G' n4 H2 {
11.3WEP破解232
% l( Z, k3 R! a% s+ K+ d11.4ECB模式的缺陷236 + a$ Q/ S, w' G( e5 q
11.5PaddingOracleAttack239 ) _+ M$ X7 [7 P' l. v
11.6密钥管理251 1 {+ K+ x) ?7 W2 i
11.7伪随机数问题253 : L. m; _ A2 W9 V
11.7.1弱伪随机数的麻烦253
" u7 i! t) i1 K11.7.2时间真的随机吗256 ; f0 u/ h. A# z
11.7.3破解伪随机数算法的种子257
+ E4 ` V6 q! ~11.7.4使用安全的随机数265
7 t7 _5 K! w. q) @) `3 B' @9 R11.8小结265
) {8 |# O. |0 b# z(附)UnderstandingMD5LengthExtensionAttack267
! B B4 h1 d L6 |; G; _$ e& N' X7 F4 j$ |: @. O
第12章 Web框架安全280 k8 I/ |6 K" R4 B3 W/ w
0 X& ^' R2 N# N# z3 u
12.1MVC框架安全280 ]6 n" U+ A9 p7 B$ N
12.2模板引擎与XSS防御282 # l7 U. b5 A7 Y
12.3Web框架与CSRF防御285 4 c0 m% B+ x2 |+ ?+ r" W: }
12.4HTTPHeaders管理287
0 f6 L9 `# g/ J" D2 l12.5数据持久层与SQL注入288 5 @' ?; t' @- S
12.6还能想到什么289
. |2 Z& _) C9 O! j/ V8 _ E, }; R12.7Web框架自身安全289 - I$ j' A+ d% e8 q5 a$ T
12.7.1Struts2命令执行漏洞290
+ M0 }5 e8 _* ]: P# d12.7.2Struts2的问题补丁291 $ y6 V) F8 t3 x: s3 I' D
12.7.3SpringMVC命令执行漏洞292
/ ^- w1 G& L. ^12.7.4Django命令执行漏洞293 , l; Z: F. b* c8 o
12.8小结294 0 T2 |) B# ? G
4 \( X$ P7 Y" y( \
第13章 应用层拒绝服务攻击295 0 T/ y: O% b& ^8 J. E! u& P
+ X& I! n; y5 i! _3 X8 r" k4 a
13.1DDOS简介295 2 p9 T5 i$ M( O- r2 G8 M
13.2应用层DDOS297
4 F1 I6 V v+ G) r; @6 v13.2.1CC攻击297 / D- V1 r. o0 C; {& h: S
13.2.2限制请求频率298 & d8 ?7 f2 @! G2 e2 P
13.2.3道高一尺,魔高一丈300
) A; C7 Q* y4 Q& L13.3验证码的那些事儿301
+ }4 K0 T ]/ ~ t13.4防御应用层DDOS304 & {# x$ M; V7 o$ D
13.5资源耗尽攻击306 3 Y! i7 z) b( Z) E, _1 r+ A
13.5.1Slowloris攻击306
( C% N+ g/ q, N# W4 K- F/ e" ]13.5.2HTTPPOSTDOS309
$ n+ Y! a' z# m, a1 r13.5.3ServerLimitDOS310
5 |4 o/ [" R- e1 \) j13.6一个正则引发的血案:ReDOS311
$ U0 n, c; |2 {# I k' _9 |13.7小结315
* o( b$ h, K& y; A5 H/ T* r$ _1 K! L* _2 N/ g
第14章 PHP安全317 7 G9 V& ^: w2 p9 h4 b
9 V0 u& ~3 K+ j& g
14.1文件包含漏洞317
! i+ {( X5 U4 y$ o; S( Z14.1.1本地文件包含319
) F; G% U; K+ e14.1.2远程文件包含323
2 Y% S$ J$ k( d5 o0 }14.1.3本地文件包含的利用技巧323 , V7 S6 `( `1 ]1 }7 t. U2 @
14.2变量覆盖漏洞331
% b! K# R+ x4 d, g$ k, c* H5 z14.2.1全局变量覆盖331
4 Q0 s: }: M' ]' T14.2.2extract()变量覆盖334
0 S! d8 a. k2 p" ^5 W6 [: W* _& z2 b& T14.2.3遍历初始化变量334 8 h9 {' ~+ }$ A, V
14.2.4import_request_variables变量覆盖335
8 E9 p& s& c6 Q! Q14.2.5parse_str()变量覆盖335 # O2 {3 x; A% Y6 b
14.3代码执行漏洞336 + j* z2 x% a+ l1 H
14.3.1“危险函数”执行代码336
# _ D% I) u& U6 z1 i' d14.3.2“文件写入”执行代码343 8 |+ p1 I" \! I2 m& L4 }
14.3.3其他执行代码方式344
# n5 A2 P8 R4 F# @- j14.4定制安全的PHP环境348 6 v$ o8 u: ~4 m5 e F3 b
14.5小结352
7 M) N' C2 |5 @6 M4 f
5 L- `6 A. r" I: h1 U8 C" V7 b) u第15章 WebServer配置安全353
v) M4 l& j7 v( P% G$ b
6 v0 V$ a: b5 z0 h15.1Apache安全353
, i( e5 Q) S" O1 Q/ D15.2Nginx安全354
, V- ~0 g/ k2 o4 L; L15.3jBoss远程命令执行356
$ l. ^8 M2 Y6 ]- p, [" H2 T( C15.4Tomcat远程命令执行360
# o8 j b( y+ u15.5HTTPParameterPollution363 % @' B. [5 t$ z$ V5 r. ]! |
15.6小结364
& G/ [6 U' Y! N( j
( D# {0 M: X- e; k
6 x- J$ @1 E% t. B* b第四篇 互联网公司安全运营 8 { F+ B2 ]0 i* ], Q8 X! d5 N
, \" K5 ^* i4 c( h, g3 ?" j8 R
第16章 互联网业务安全366 8 `4 x; K# _# ` b0 K5 d
- w3 p: Y( G8 j$ m1 O
16.1产品需要什么样的安全366
+ m, o' o8 M: [+ A; @5 t8 V16.1.1互联网产品对安全的需求367 ! p8 D7 H/ Q; G$ u7 {# |+ C
16.1.2什么是好的安全方案368
7 v# U' ~9 y. M8 d$ g; i16.2业务逻辑安全370
S' N& E; ?7 Y) a7 t16.2.1永远改不掉的密码370 " y- n2 m. R# U" }% y
16.2.2谁是大赢家371
. g2 W+ y4 P/ B4 h+ i16.2.3瞒天过海372
" T8 f% j) M4 Z' b$ R1 K0 z+ u16.2.4关于密码取回流程373
5 _& a; m; F6 k+ b16.3账户是如何被盗的374 ( |2 l9 P+ t& @2 a7 ]* W6 z% m
16.3.1账户被盗的途径374 : ^$ o- u. `6 o! T+ F* {
16.3.2分析账户被盗的原因376
0 g/ a% n: K4 x( t% c( y( ?4 f16.4互联网的垃圾377 " [1 F! c' w* ~5 V% O
16.4.1垃圾的危害377
, W0 r( `% Z4 V* j16.4.2垃圾处理379 6 E, T; `% ~9 D8 c
16.5关于网络钓鱼380 4 m3 G1 V1 V! {( `- l9 X" a. C
16.5.1钓鱼网站简介381
0 E6 R. d/ Q1 q. b, B16.5.2邮件钓鱼383
3 J t, y9 b& Z& s; Y16.5.3钓鱼网站的防控385
\ N1 x9 m1 b j16.5.4网购流程钓鱼388
a+ M# A& ?' A/ G16.6用户隐私保护393 : |" M" F2 p$ c8 C
16.6.1互联网的用户隐私挑战393 7 ?2 C0 v5 H2 R2 t$ [
16.6.2如何保护用户隐私394 ( E/ G) G, u" ?/ k* V9 F1 s$ A
16.6.3Do—Not—Track396 % i8 L! j+ }2 D7 Q8 j, W
16.7小结397
: N$ B: u, l7 a$ A6 O5 ]7 }(附)麻烦的终结者398
( ^9 V7 H+ C& e/ U& _ t$ {" p$ ]- o4 Z6 Y" B6 Q' l g. }
第17章 安全开发流程(SDL)402
' ]7 c. A- V9 B- v* s U8 r; A& g/ G8 p" ~. ~! R, P& r( q1 o; E$ @
17.1SDL简介402
+ }$ Y( g! X7 M9 z0 q17.2敏捷SDL406
) t' L- e% p# _$ p+ p3 H' B17.3SDL实战经验407 ' N. i2 c* U) v+ X
17.4需求分析与设计阶段409 5 F( Q6 Q" o; l* _# n/ ~% W* C
17.5开发阶段415
5 @0 G! R, s" q/ d; K17.5.1提供安全的函数415 $ S0 J7 b4 ~; e! r
17.5.2代码安全审计工具417
; H: _3 G. I6 C9 s" _17.6测试阶段418 # o* s$ S- N2 w) E# y, D3 j
17.7小结420
8 G$ N4 G+ Q! j5 P* V( \
$ ]4 a, f5 E* d( J第18章 安全运营422 1 ?$ v" m& u" M) U5 M
* `5 b4 [' i- @0 y3 \+ h18.1把安全运营起来422
% p" T2 Z0 g/ c* ?9 O& o18.2漏洞修补流程423 * N; a6 m, B# A! ] a: ]2 h- ?8 s9 |
18.3安全监控424 J( d1 ]) P# u
18.4入侵检测425 6 E4 Z/ W4 z: M- L2 [) {
18.5紧急响应流程428
5 [. i9 u! A( [+ b0 O8 q) B3 F18.6小结430
% h2 g1 \' u$ S8 U(附)谈谈互联网企业安全的发展方向431' m& Z) D$ @- i8 E
/ E( n) P, h" U/ _4 Y
. [% H/ \. ^% `. E U- ?* Q N |
|