|
socket连接多层程序安全性简述 - 数据 ; k; o) f5 I; _5 x' a2 y
. Y1 p* Y& T" [
剩下三种数据包/数据包完整性/数据包保密性
! V& e" i$ e/ e. m5 A5 M其实只是一种安全机制的不同级别实现而已 ; J3 N+ [ K; b8 t |+ Y+ j) }
数据包对发送者的身份加密,完整性和保密性 6 F0 E/ D" e5 Y% q j1 m" [3 {
是对其的有益补充 2 l. W+ r V: C {) d! }
% i3 ?' h; m6 p. v实际上数据包模式对发送者身份加密实现方法任意 6 a2 h, B1 h- ]" e [
比如可以用Windows提供的那套加密库
, u. @2 ?) F) k& L, ~呵呵,反正只要你在服务器端对其进行检验 ' c8 o; E* u5 s( @, n* h2 V
传送中途数据包被截留不会泄露发送人身份或
) {8 v! X/ G6 h7 ~1 H, m% }5 Y可以证明发送人身份的数据即可 $ ~: o- ^3 u; ^' F' G) W7 K/ P
' d1 P7 C! Q& L3 w
而完整性可以通过各种算法保证,比如crc,md5都是 % o, Z$ J4 y, t; k
可行的,甚至简单一点按位and/or也不失一种办法
7 g! m# K/ P/ {* Q只是比较简陋罢了,呵呵,总之要保证数据不会被
4 S6 S2 A" j u' n3 C, U中途截留者更改 ( L8 O0 c- w& f) O( t. s3 W
6 z% h: x2 W1 y1 m! e9 N, V; c( Z至于保密性,找一种对称加密算法对全部数据进行
0 d' k" j3 S$ e% C加密,然后将密匙用另外的非对称算法再次加密即可 9 m6 t2 _7 T/ z! q D/ p7 G1 I4 @
具体这方面的安全考虑问题可以看看《应用密码学》 7 n7 |9 p7 ^; Q
一书,非常不错的这方面的权威书籍
8 z& z! u8 K H( Y! r- }& l & T0 @" t1 P. Y) j, w
这里需要提及的是这三种模式的实现,
8 K4 ?4 d: i* O3 w3 o简单一点的可以类似上一个呼叫模式中
# }$ E6 E! M! F& b# s" B$ b$ `9 t在IAppServer::AS_GetRecords或者
, E- ~# F# C7 \ z0 B其他类似的事件里面实现,参见上篇文章 : O& f/ ~2 `, U2 y# D
% e8 R6 }9 q; K% z- H4 s# h不过很幸运的是borland提供了一种更加简单可行的方案 0 p) M/ G: i4 k) `( V- B. N
IDataIntercept接口
! y" D* t! z/ i# I + y3 e, Y3 j5 h. d
__interface IDataIntercept; . s* `: D R/ r! h3 o
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept; 7 M% W s" p1 w K B
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
1 s! k( X+ [) n. Z( Dtercept : public IUnknown
, Z9 ^; @- P0 V' w{ * x4 T* m% T& ?2 ?$ o) ^
public: * X) |$ s' j& E, Z% X$ S) X4 ~3 U
virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ;
- L" ^0 a% h4 t1 L5 |% e virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ; / {% M7 }( l. H5 A7 b) b; m
}; 3 e' O. C' k/ J! [$ e
他在TSocketConnection类传送数据时会自动被使用 ; X+ q+ ~/ j) e$ } z9 L
呵呵,用它实现数据完整性和保密性都是非常合适的选择 8 Z7 c+ K& L2 ?2 ?
外加还可以对数据进行压缩,呵呵 ! }& ^$ L$ L: d* L( }
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
6 A( R0 O5 V) R3 \0 H - {4 [4 S1 H5 p1 E
MS对这几种安全机制的分类是高级别兼容低级别 ; ^" }& |: D6 O
实际上在我们自己使用的时候完全可以根据我们的需要
0 {$ L8 j6 I0 ~. R7 R自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案 " j5 ], d/ Z: [2 r1 q0 a
, n+ \. I$ J7 D; `3 o! P" d4 t+ [btw:本来想随便写写,发现好像很多问题都几句话说不清
6 s9 }6 {; Q# r9 w. I2 @, g 等到下个月有时间偶把这些东东好好总结一下写篇 & V w4 ~" H+ S0 m/ `4 ^
象样一点的文章出来,呵呵 & K9 ?' S$ q/ s
3 T6 E# J) X7 J; k 其实这些安全模式的实现方式还有很多,偶只是挑出
}2 x- j0 m8 K6 X7 [& k9 Q 偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
0 t; G7 Q6 \" \( b" l1 e m: Y1 z j 希望能够对大家有帮助,也希望大家积极讨论,批评指正 |