|
socket连接多层程序安全性简述 - 数据
% z/ U/ G, x% h4 E 8 F& @2 r3 b, Z/ A7 ?
剩下三种数据包/数据包完整性/数据包保密性
, s- B# J+ \5 ]& h& M+ r其实只是一种安全机制的不同级别实现而已 . R& N2 Z1 c. f
数据包对发送者的身份加密,完整性和保密性
4 S0 E5 E( l6 C! l1 B是对其的有益补充
! W; `2 J. e+ W! N& [/ R
" m! `" o: h" o* {7 {* j8 {实际上数据包模式对发送者身份加密实现方法任意 ' C2 z9 \, }+ I: y& B
比如可以用Windows提供的那套加密库 # o% H/ d; g) {
呵呵,反正只要你在服务器端对其进行检验 2 y! i6 m8 k' B
传送中途数据包被截留不会泄露发送人身份或 2 G+ g- x. r! m2 D6 v9 M5 R
可以证明发送人身份的数据即可
. G# F/ @2 [6 L8 X8 q ( F" r3 C' v1 @6 D- R0 Z1 P
而完整性可以通过各种算法保证,比如crc,md5都是
5 r7 v& m& O4 m可行的,甚至简单一点按位and/or也不失一种办法 8 K: j# k3 _2 i! D6 S( ?
只是比较简陋罢了,呵呵,总之要保证数据不会被 ; h* A/ m; r7 o
中途截留者更改 ! z+ o1 D* U" T% |
3 O) X5 l. _* z7 |: [" j至于保密性,找一种对称加密算法对全部数据进行
3 R4 w6 ^# f( U+ q加密,然后将密匙用另外的非对称算法再次加密即可
) H/ v$ j/ N, A3 D r具体这方面的安全考虑问题可以看看《应用密码学》
' H3 x R% s" H4 z一书,非常不错的这方面的权威书籍 6 ^/ d3 R: n* o% j
. m" s2 z& C* X4 O6 n! H这里需要提及的是这三种模式的实现, & ~7 M" ]2 i3 {) X" ]
简单一点的可以类似上一个呼叫模式中
2 C- ]- u9 T" E0 A/ V* \/ A. p. H; b d在IAppServer::AS_GetRecords或者
, F# q! f' G! a( L: B其他类似的事件里面实现,参见上篇文章 # q2 p& @7 n: A! `1 k3 k& O: }
: f5 {, @4 y9 j4 a% G不过很幸运的是borland提供了一种更加简单可行的方案 ' @. p# ~; Q9 S, C+ N4 d# T( X+ s
IDataIntercept接口 ( n# }4 v: W/ P* H) k! T, L, ?2 y
0 E5 q0 O5 H$ h: z" Q' V8 s
__interface IDataIntercept; # Y5 c4 _) V0 f% ^
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept; - g0 M/ h5 r) t5 ]! h* i% I
__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn ' F$ @3 K. J: ^+ ?
tercept : public IUnknown & R; u) K# a1 D- h d$ z
{
. z/ r# e+ \3 }6 g6 T" wpublic: * L# G8 W; r6 j1 c: _# Z6 H0 S
virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; 6 z& f- T5 P" r5 ^, G9 K
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
5 V2 Y+ r! u0 R6 t}; ! `( e) k& q9 A- }. j* j- A) Q
他在TSocketConnection类传送数据时会自动被使用 - D/ w, P- ?" q& z
呵呵,用它实现数据完整性和保密性都是非常合适的选择 ! j1 k' P$ i) t/ e
外加还可以对数据进行压缩,呵呵 1 c, l/ x9 J- H/ o% v- P& G6 L8 }/ L6 _
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
% Q1 q- \# G/ z! [5 D 5 y8 A; H" [% b5 \! E
MS对这几种安全机制的分类是高级别兼容低级别
( u+ g% q0 A; \3 x" ~实际上在我们自己使用的时候完全可以根据我们的需要 5 u, U: I0 U# [6 D( x l- M
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案 " l9 Q9 S& y) i; F0 x
: C/ S( O8 K9 {/ `& K( p/ V9 N
btw:本来想随便写写,发现好像很多问题都几句话说不清
% L F+ i, [) D2 O# j& `+ N 等到下个月有时间偶把这些东东好好总结一下写篇
$ S# w, T" P7 |# r2 T 象样一点的文章出来,呵呵 & {7 d& W, k! K
3 q' B* ^7 T3 Q0 L7 y$ a8 j9 A+ _; M
其实这些安全模式的实现方式还有很多,偶只是挑出
* `3 l- A" b: {' u 偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
% D3 X. l6 i. @9 r: R! l* Y4 G 希望能够对大家有帮助,也希望大家积极讨论,批评指正 |