|
socket连接多层程序安全性简述 - 数据 4 n% r5 {& l- U+ j* D$ T
3 \ T2 X5 H5 \$ u0 f+ W, _. V* V' h
剩下三种数据包/数据包完整性/数据包保密性
9 k4 X& k# o6 S6 ?1 A( j) h其实只是一种安全机制的不同级别实现而已 , @, A* q+ W9 q3 x5 |
数据包对发送者的身份加密,完整性和保密性
0 F1 u1 N+ a. Z+ X, U是对其的有益补充
1 x0 a, o6 ~4 P" L! H/ _ 5 e% Z1 o$ ~* o5 x/ c
实际上数据包模式对发送者身份加密实现方法任意 9 x! S, Y- u3 o5 d; V: f( y
比如可以用Windows提供的那套加密库 " G$ H9 j9 Y, a: O7 N5 \
呵呵,反正只要你在服务器端对其进行检验 3 O9 @: h+ Q. P& \( n
传送中途数据包被截留不会泄露发送人身份或 & H5 w4 Z$ w! j
可以证明发送人身份的数据即可
+ r6 r$ j3 q) S3 j- C' z " P j8 R7 E4 x% u& s5 f
而完整性可以通过各种算法保证,比如crc,md5都是 + B0 q" H; m9 g2 n' o' N8 Z
可行的,甚至简单一点按位and/or也不失一种办法 6 V, x2 t9 C( o: p
只是比较简陋罢了,呵呵,总之要保证数据不会被 " V! d1 q0 d( R: q7 r; q+ M5 k
中途截留者更改
. C; O# O" v1 |+ l; z: ? " l A- f. g# \7 z& l: p X5 j* Z
至于保密性,找一种对称加密算法对全部数据进行 - s" I$ D- e' _# K. W: s U
加密,然后将密匙用另外的非对称算法再次加密即可
" Q, K! A4 M( x* p具体这方面的安全考虑问题可以看看《应用密码学》 % T R9 a) ~$ S# f
一书,非常不错的这方面的权威书籍 & Q/ _. S8 l) k. ?# S7 |9 f6 b
( o9 {0 F. j' m+ S! F
这里需要提及的是这三种模式的实现,
% s( H( t% m. i0 _+ |4 h7 T/ U" ]简单一点的可以类似上一个呼叫模式中
! i. U; i; C3 x- p% ~& s' {在IAppServer::AS_GetRecords或者 6 o4 o% B/ d$ m
其他类似的事件里面实现,参见上篇文章
' z4 E/ ]+ S D; w3 d9 |$ i
) Q/ F1 j# ?! A2 {! e/ F不过很幸运的是borland提供了一种更加简单可行的方案 , `' g& }1 ^; [9 s4 e' w
IDataIntercept接口
0 I: N7 y. S( v6 Y: H 0 k, `2 t R6 ^( ]" ~6 l: `, c
__interface IDataIntercept; 8 f) e& C- x" z* I5 b
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept;
3 g% y& ~3 u0 j+ } [7 n3 q e__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
0 w4 X: x/ n! {, Rtercept : public IUnknown 7 @" k* P( h) D5 W
{
1 z- h1 a2 p& |& w1 ~public:
2 n, f& ?; P& L9 I# h virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; ( b$ V5 h$ |* Q
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ; ) c- N, ~& d8 r" Q
};
1 r! G, |* I A他在TSocketConnection类传送数据时会自动被使用
, N& E# r, E& W Z呵呵,用它实现数据完整性和保密性都是非常合适的选择
6 s3 `9 m" b3 l: }6 O7 M/ B0 v外加还可以对数据进行压缩,呵呵 & d3 d* w2 F2 D' _: N9 Z0 t
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子 - X, Y) O! G1 i
9 ~1 I5 c! c& xMS对这几种安全机制的分类是高级别兼容低级别 , ]2 U" `/ ^: H8 @) g
实际上在我们自己使用的时候完全可以根据我们的需要 , }% }. Z- m, x, i
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案 + [& a+ i0 o+ y) S7 j1 O
% i* r+ \2 v7 O ^btw:本来想随便写写,发现好像很多问题都几句话说不清 4 R; D) ]4 w; o7 N
等到下个月有时间偶把这些东东好好总结一下写篇 - l, V: M v' o
象样一点的文章出来,呵呵 $ d, w* J0 v3 K! D
, L, O5 i3 V; R# F5 ]8 [
其实这些安全模式的实现方式还有很多,偶只是挑出
$ p, R: f! u& P: e- b: q 偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
% L# x$ _: A+ ^- z0 t! y; F 希望能够对大家有帮助,也希望大家积极讨论,批评指正 |