|
socket连接多层程序安全性简述 - 数据 6 c% G/ m9 Z4 Q8 g/ h8 V
4 {3 v7 N" R4 {# v* f3 J* M8 g剩下三种数据包/数据包完整性/数据包保密性
$ j/ w" Q3 H2 O0 t0 V4 @ ?其实只是一种安全机制的不同级别实现而已 Q: K: ^# C; X! `. ~' y C8 p
数据包对发送者的身份加密,完整性和保密性 , y, E8 D7 P2 ^2 V8 ~
是对其的有益补充
; L) v" O1 S( }; W( V5 P 5 T' l! y ?% x5 A
实际上数据包模式对发送者身份加密实现方法任意 ( {) V0 a S K' O" j( `% ]
比如可以用Windows提供的那套加密库
, c, J) s# X% q4 W7 _! G# x呵呵,反正只要你在服务器端对其进行检验
" d) o& e! P; }- b传送中途数据包被截留不会泄露发送人身份或 / M2 y% T2 P" U6 _* G; ?( o
可以证明发送人身份的数据即可 ; K3 I2 }! K5 o0 {: L( U0 f6 @6 G
) {7 M& L9 X0 K* n0 m5 x而完整性可以通过各种算法保证,比如crc,md5都是
: o8 n6 d! a! ~8 D* d' x$ F) Q可行的,甚至简单一点按位and/or也不失一种办法 ) Q# e+ e) A$ S" }' L
只是比较简陋罢了,呵呵,总之要保证数据不会被 ' H X9 m1 K9 A: m/ f" H! {: ~. `
中途截留者更改 * n% f! [6 W8 t, x
* `7 V5 w. `0 @; D8 E; R至于保密性,找一种对称加密算法对全部数据进行 % [7 q6 n1 x4 b
加密,然后将密匙用另外的非对称算法再次加密即可
X( r5 H4 Y% K: X, F, N% p1 c( y具体这方面的安全考虑问题可以看看《应用密码学》 ' @6 L) n1 f- o7 u6 l& `4 j! T
一书,非常不错的这方面的权威书籍
) n! [' H' a! O7 ]9 L' K 5 ?4 [- _: d. T' v5 {' n7 I
这里需要提及的是这三种模式的实现, $ \) e m2 m9 L
简单一点的可以类似上一个呼叫模式中 ' C. s8 x% Z" P3 R6 U
在IAppServer::AS_GetRecords或者
]1 [' A$ l/ ~其他类似的事件里面实现,参见上篇文章
. [% m- {4 ?/ _ t% |. S$ ^
7 ?' e& t: G. H# U5 a' h( A不过很幸运的是borland提供了一种更加简单可行的方案 6 c& I* l$ C5 S* `
IDataIntercept接口
" A9 `7 A, c, S3 [& D6 D
" \6 @6 A* f! u% ~! E$ d9 X. l__interface IDataIntercept;
$ i) H& y- V# W7 [typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept; ( Z1 X, U2 z+ e
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
/ |) v2 N) f$ L+ D7 ytercept : public IUnknown $ x* u9 W) k, ^, p# j7 j
{
: E# B6 S$ W; k( }8 s% C Z+ tpublic: 0 d1 b! R1 U. O6 Y
virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; / o. k( J ~+ M* i
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
. D/ E: `- S* o4 { e$ L, c9 c};
* R; `, I _, N* U0 C" l5 o" B他在TSocketConnection类传送数据时会自动被使用
9 q7 G1 C9 g8 E) Q, S呵呵,用它实现数据完整性和保密性都是非常合适的选择 6 ?: Z# N, c$ h0 S% _0 F
外加还可以对数据进行压缩,呵呵 5 x/ _1 O: g" |6 b
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子 " @1 _5 u1 ^% q4 [! Y
1 K: w, y( ~: ZMS对这几种安全机制的分类是高级别兼容低级别 . F$ U! ^* k- V4 u
实际上在我们自己使用的时候完全可以根据我们的需要 * f( X& X. W3 z9 ^) T, c" A' x- ?' p! E
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
) |% l4 _) r# d* ?. B# g9 a
9 V$ Q. K. U/ P& i% Z$ V) N- v$ j1 N" nbtw:本来想随便写写,发现好像很多问题都几句话说不清
3 y, Q; b/ Z2 {# J ]. G 等到下个月有时间偶把这些东东好好总结一下写篇 ( [9 i) J6 v4 t9 {5 z9 p/ Y# t
象样一点的文章出来,呵呵 6 S& z v* @' {, d9 M0 Z7 H% O' R
- P$ Q* ^& q; P2 ^4 `/ W6 m4 g
其实这些安全模式的实现方式还有很多,偶只是挑出 & _6 p! I. p4 x' c7 O/ Q
偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵 ( \8 J6 M0 w6 K! y G$ t
希望能够对大家有帮助,也希望大家积极讨论,批评指正 |