|
socket连接多层程序安全性简述 - 数据 $ A8 U5 C) t w2 ~& r* L
8 h3 s& Q! T! S+ z2 j: S" M' N剩下三种数据包/数据包完整性/数据包保密性 / T/ J6 ?4 _+ S4 m5 [+ }
其实只是一种安全机制的不同级别实现而已
; ~/ d7 Q9 c# q. ^9 Q( g数据包对发送者的身份加密,完整性和保密性
I2 r, N! F& S; C s* d% m是对其的有益补充
9 x- s4 @1 N" X- m% ` 8 h8 u' z1 F5 p$ f% j4 c1 N! B4 m
实际上数据包模式对发送者身份加密实现方法任意
e. g; ~; |/ Z u3 A I比如可以用Windows提供的那套加密库
/ j3 A# x; o, v8 v l呵呵,反正只要你在服务器端对其进行检验 ! h: Z2 Z0 Y6 E7 L) h
传送中途数据包被截留不会泄露发送人身份或
7 I5 Q$ S/ _% k8 V可以证明发送人身份的数据即可
. _$ x; e% o; W" }
$ `; J& c$ e* A* {2 v而完整性可以通过各种算法保证,比如crc,md5都是 & a# `) a7 C, O$ {
可行的,甚至简单一点按位and/or也不失一种办法
' G! }! v9 O4 K- g只是比较简陋罢了,呵呵,总之要保证数据不会被 % Q5 c |2 t+ u& }
中途截留者更改 5 |( M4 @6 s2 ~9 p
( f/ F- l( A! F3 {* F. a
至于保密性,找一种对称加密算法对全部数据进行 3 f+ I5 D8 W% B' t/ m# Q6 C
加密,然后将密匙用另外的非对称算法再次加密即可
" v! O! X- U _8 k& Z3 b具体这方面的安全考虑问题可以看看《应用密码学》 3 P4 V @% m3 R0 g, s
一书,非常不错的这方面的权威书籍 . D0 |6 C: p, Z% |) s4 h
" Z- Z& B" B1 U3 n+ \) ?
这里需要提及的是这三种模式的实现,
4 N) m3 o- d2 Y' B2 s7 l简单一点的可以类似上一个呼叫模式中 6 S) Q6 i0 b! i# g/ w3 `
在IAppServer::AS_GetRecords或者
2 M; s! ?$ j! N3 _/ [, l其他类似的事件里面实现,参见上篇文章
+ o: e3 O% p; K6 t6 V
3 ^* u1 T: T# f& l( q* H不过很幸运的是borland提供了一种更加简单可行的方案 & W: X6 ~6 O8 g2 }) P a, u7 d
IDataIntercept接口
! w0 W8 J+ C7 h, Z& e 4 k0 }- e' A( E g% z
__interface IDataIntercept; 1 X( A h! Q! D7 Y/ b' N
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept;
( V2 e9 k/ h$ f; R, o0 F- e& s__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
! e7 s- K% B+ i& n# H; a4 J1 htercept : public IUnknown 4 V' d: K1 J0 P5 e7 b7 j& V' k7 @
{
5 p$ x8 J I9 y: T3 gpublic: 9 V3 Q- K! b$ g+ H
virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; 4 e6 F7 v2 a7 ] J
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ; - e- C* i% C1 @5 z7 I3 G: z( {) D
}; " n* J! y4 \+ j# k7 Q& d
他在TSocketConnection类传送数据时会自动被使用
) `4 K7 M% y+ g% r8 l/ |呵呵,用它实现数据完整性和保密性都是非常合适的选择 2 w1 ^* b$ a( @
外加还可以对数据进行压缩,呵呵
w3 R2 n. E! Y9 ?$ ?具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子
& e, v! I0 _, V9 B 4 b# l. v. C. V3 X/ Y: x; B/ l
MS对这几种安全机制的分类是高级别兼容低级别
$ K' w0 o; M" K6 i实际上在我们自己使用的时候完全可以根据我们的需要 7 N& m# i4 W y# d; u% o- `
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
4 o8 @* s) d- P: c; | m; _
' }6 A) B' {" i) {4 }; cbtw:本来想随便写写,发现好像很多问题都几句话说不清
" {" i: H2 Z0 i4 H6 ^+ Q3 w5 C! ] 等到下个月有时间偶把这些东东好好总结一下写篇 & h% c& z! V' v/ d* M
象样一点的文章出来,呵呵 ' y5 @( y5 I# `$ V! S
8 G9 R W, p- m
其实这些安全模式的实现方式还有很多,偶只是挑出 ! a" J8 D( Q3 L5 }* X
偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵 3 u6 r' C: l y: S6 Q$ S$ `+ s3 d; \
希望能够对大家有帮助,也希望大家积极讨论,批评指正 |