|
socket连接多层程序安全性简述 - 数据 : X b( |* E$ [/ n# l8 A: p Z
6 ?2 e: ]3 V' [剩下三种数据包/数据包完整性/数据包保密性 6 q3 K$ L1 H3 b7 `% h0 H* J. l
其实只是一种安全机制的不同级别实现而已 - S$ B# f. l7 m; Y, J4 p g; O
数据包对发送者的身份加密,完整性和保密性 ) ~/ R, s3 q2 |$ C
是对其的有益补充
* d; h2 d" Y2 S 3 Q- L# P$ p7 j: t6 m5 z0 {
实际上数据包模式对发送者身份加密实现方法任意 $ Y& B7 P, y1 C2 e
比如可以用Windows提供的那套加密库 . o7 \1 u+ m; p* s: l0 K
呵呵,反正只要你在服务器端对其进行检验 % i2 |" A: ?$ @$ B: ]
传送中途数据包被截留不会泄露发送人身份或 ! J( L. D& z$ a: V% Z( d5 u
可以证明发送人身份的数据即可 6 y& A1 l6 s) d' v/ q) A. S
]& Y) [+ S1 G/ n而完整性可以通过各种算法保证,比如crc,md5都是 ~0 s8 _: Y$ }8 q
可行的,甚至简单一点按位and/or也不失一种办法 ! ^4 e$ Z8 g9 L# w* ]8 s/ w
只是比较简陋罢了,呵呵,总之要保证数据不会被
9 H9 i1 R% C+ @: e a% Y7 ]. U/ n4 f中途截留者更改 9 [( Z2 X+ U9 x9 h: A
2 c- _# e6 R9 U
至于保密性,找一种对称加密算法对全部数据进行 % J) j# v9 E( D% x. E
加密,然后将密匙用另外的非对称算法再次加密即可
) [8 x% C5 j% p' K" m0 e# Y X8 W具体这方面的安全考虑问题可以看看《应用密码学》
6 m0 q6 Y2 n/ p( n3 f5 d一书,非常不错的这方面的权威书籍 % }, e6 |& k, G2 M. Y
4 w& W$ B2 a& J$ F- y3 D Y5 T这里需要提及的是这三种模式的实现,
0 l& A5 c1 P) H# ~! x简单一点的可以类似上一个呼叫模式中
9 [+ Q. ~# Q4 p: n在IAppServer::AS_GetRecords或者
/ B6 T2 v, X' `其他类似的事件里面实现,参见上篇文章 ; M: c2 m, x) Y1 \0 c
; ~9 B. ~+ E; Y+ ?8 k( b. L2 V X不过很幸运的是borland提供了一种更加简单可行的方案 , W+ ~+ k K" H8 \
IDataIntercept接口
/ r: z* J6 ^, G& ]1 N8 r
: a' V( F; }' K2 {. E9 f0 q__interface IDataIntercept; * R& X( U& ]& D! p
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept; 7 v6 w+ _8 e- e
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn * x) d, a7 M* j
tercept : public IUnknown + }+ b* G2 o4 O; R" Y& [
{
; T- H1 C, Q# V b; [public:
( l: j2 u, b3 Y4 |6 a virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; 5 K( X' k& j& I' W- W6 _' k5 n
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ; ( ?! `" O1 ^# \2 i6 H3 b
}; " |+ p( i( k1 |- s
他在TSocketConnection类传送数据时会自动被使用 & O P! `$ C: j9 l4 u, o% m2 C
呵呵,用它实现数据完整性和保密性都是非常合适的选择
7 c' w+ I0 @; f7 v4 x+ E外加还可以对数据进行压缩,呵呵 3 D( r+ E; T. e3 `
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子 1 N) N8 {. W- W9 k2 X# z
& Q6 e. q+ s5 n+ UMS对这几种安全机制的分类是高级别兼容低级别 - ^: w% k# V& ?! `0 z/ X; n# ]
实际上在我们自己使用的时候完全可以根据我们的需要
' R3 R. E$ I& Q* b3 b+ R自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
7 b: g. M2 ], O% i
, k* I2 Z9 O( M/ M1 D& l6 X# h7 {+ S% Vbtw:本来想随便写写,发现好像很多问题都几句话说不清 N0 a% @; g* y6 @% M9 N7 v
等到下个月有时间偶把这些东东好好总结一下写篇 9 U- I, @4 N8 t
象样一点的文章出来,呵呵
6 R1 o3 ~" _+ e: u . |2 D5 I" o& D) O( C8 Y! y
其实这些安全模式的实现方式还有很多,偶只是挑出 6 R$ g/ P3 ]% C* ]% Y, b
偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵 8 N5 I& H* }& M; {8 z6 {
希望能够对大家有帮助,也希望大家积极讨论,批评指正 |