|
socket连接多层程序安全性简述 - 数据
0 E5 V1 o4 q/ N( k ( B% H# m2 W7 {% q8 i
剩下三种数据包/数据包完整性/数据包保密性
; ~9 @% f- s% x& i% T1 k% w8 `5 h v其实只是一种安全机制的不同级别实现而已
$ |* [7 H) j/ ~, A数据包对发送者的身份加密,完整性和保密性 + q0 C+ i7 H& n, R' H m
是对其的有益补充
) t! C$ A1 l4 M8 ~; u0 k z6 q% D 1 P! W4 z i; e3 N4 ~
实际上数据包模式对发送者身份加密实现方法任意
$ K: m4 c. ]4 Q; U! t* _比如可以用Windows提供的那套加密库 ' r( Y* O; \. H4 O
呵呵,反正只要你在服务器端对其进行检验 & X; Y$ {+ G/ Q/ b* t& a) i
传送中途数据包被截留不会泄露发送人身份或 - }& j4 z" i9 {7 w1 R6 L
可以证明发送人身份的数据即可 0 m* }* T7 w* x1 S
# v; B, `$ Z# {. S4 H- _而完整性可以通过各种算法保证,比如crc,md5都是 * f1 V( B/ v4 W3 R2 e& |
可行的,甚至简单一点按位and/or也不失一种办法 % X9 ^+ a. r/ }0 U7 B& q7 }# w
只是比较简陋罢了,呵呵,总之要保证数据不会被 9 T2 p/ X4 C# Q9 L
中途截留者更改
% x, n# C5 U7 X7 J" Y8 s
! ?3 |: y9 B* B5 g. ~至于保密性,找一种对称加密算法对全部数据进行 " \& p0 T0 \( f& N3 E6 a
加密,然后将密匙用另外的非对称算法再次加密即可 . P3 E5 H! J6 l) ^! ^
具体这方面的安全考虑问题可以看看《应用密码学》
: @* p0 O* j% D. t* t* p j9 i一书,非常不错的这方面的权威书籍
5 r H0 f/ G! [$ `9 k, U- F( F 9 }9 M* L9 x1 S" g. Z v
这里需要提及的是这三种模式的实现,
$ e% u# l" J8 K简单一点的可以类似上一个呼叫模式中
1 z% ^" H+ b/ R, w在IAppServer::AS_GetRecords或者 & |- n Z$ ]# I7 g
其他类似的事件里面实现,参见上篇文章 3 K+ S) p% x4 g0 k
& r2 V% q4 A+ x: H! g5 U( V% ~0 l
不过很幸运的是borland提供了一种更加简单可行的方案
' N0 a+ C$ W4 A1 iIDataIntercept接口 : g% B. x5 f# C. d7 w+ B
x2 O! t/ `+ r1 L
__interface IDataIntercept; , R+ u: w$ h0 j: Y% K" p" o
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept;
8 P- a. B# c( D5 ]. R1 ~) a__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
8 u/ R' Y" R! T) S& i# ?( ftercept : public IUnknown 8 @* V9 T& x$ e5 G, g/ R5 `
{ 8 {$ c6 x: d- k- T; ^0 P1 A
public:
3 ^, v$ ]& C* i" o' g: o virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; * w7 @$ o4 I1 n5 j1 M* ]
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ; 0 {4 G0 l0 ^* G: [$ b" M8 T
};
+ K! n% B/ g; ]+ w, S( z0 z他在TSocketConnection类传送数据时会自动被使用 . m9 |# Z) M% J2 J' v
呵呵,用它实现数据完整性和保密性都是非常合适的选择 + w2 L" x7 j9 W
外加还可以对数据进行压缩,呵呵
5 f0 p. U) F( d' Y具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
- J0 P! I2 f5 T g4 t) V ; j: a' I8 G- _7 g9 F0 _4 [+ w0 b
MS对这几种安全机制的分类是高级别兼容低级别 1 X/ y! |8 h) e3 u' m
实际上在我们自己使用的时候完全可以根据我们的需要
/ P. L( h' z( c0 m! I. e自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
5 f6 @" L9 B) \' B5 [' q $ V& m+ x' X; w9 [& A
btw:本来想随便写写,发现好像很多问题都几句话说不清
* ], E4 R7 t6 a4 _ 等到下个月有时间偶把这些东东好好总结一下写篇 7 M/ u9 W" q) G3 s1 W% F/ j6 `: P( G
象样一点的文章出来,呵呵 g; f5 h3 Y$ e+ Z
9 g. d1 c( B" \ V1 c" g 其实这些安全模式的实现方式还有很多,偶只是挑出 , `: z% w& F! S3 Q5 s+ x
偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
8 T/ B, `7 i X5 q( v' s6 C) H 希望能够对大家有帮助,也希望大家积极讨论,批评指正 |