|
socket连接多层程序安全性简述 - 数据
/ J3 v; e4 ^% c i5 ^; u % f( ]% [: |1 X% `2 \+ g0 X" I+ V
剩下三种数据包/数据包完整性/数据包保密性
% U$ @7 N4 G6 t5 j9 E! q# Q/ ]9 B其实只是一种安全机制的不同级别实现而已
0 q5 R- n: n8 d2 R. ~2 r数据包对发送者的身份加密,完整性和保密性
/ L% ^: T4 X2 w4 B1 U是对其的有益补充
$ o+ Q p1 Y& r9 ~1 F; I2 ^5 T
) M" \5 w6 C+ A实际上数据包模式对发送者身份加密实现方法任意
$ n4 c: Z0 L' S, P+ o比如可以用Windows提供的那套加密库 2 C0 ^# o6 E+ g0 p" R
呵呵,反正只要你在服务器端对其进行检验
* ?# E# r7 y; R0 N- n! g传送中途数据包被截留不会泄露发送人身份或 / G; b0 k% f% n/ D
可以证明发送人身份的数据即可 , N" R, K+ W7 b1 U) R
7 L) l- q: U# L
而完整性可以通过各种算法保证,比如crc,md5都是
' |* N1 \& I N, v7 ^可行的,甚至简单一点按位and/or也不失一种办法
7 [, r+ m( o" A: E! O3 f v只是比较简陋罢了,呵呵,总之要保证数据不会被 , X: g8 R; g) \; _+ |
中途截留者更改 , J# i u, K0 ]2 }4 ]: c6 H
9 U. x8 j4 o% Q% O* o
至于保密性,找一种对称加密算法对全部数据进行
3 P: Y+ i! R; q0 {2 l, |) E加密,然后将密匙用另外的非对称算法再次加密即可
9 L* d4 A" V& {4 g具体这方面的安全考虑问题可以看看《应用密码学》
! h1 l& k# U5 W* ]9 f3 N: d一书,非常不错的这方面的权威书籍 , w4 f5 n) ~) @3 k2 b
5 p# n. e( ~* u- ]( \9 r
这里需要提及的是这三种模式的实现,
z2 F5 ^8 k- C0 x& x简单一点的可以类似上一个呼叫模式中
6 S0 @8 K3 b$ Y4 M在IAppServer::AS_GetRecords或者 8 f. g9 ?- i# v9 D0 {3 y2 @
其他类似的事件里面实现,参见上篇文章
. n! S$ }$ J5 H. r6 k6 s 5 A4 H. R+ D. z% y7 L! O0 z, Z- _
不过很幸运的是borland提供了一种更加简单可行的方案
. g# h6 Y: i! [' i$ c: ^/ LIDataIntercept接口 ( O/ O; j0 }5 s- N0 n0 R
7 C3 {) K E" o- Q__interface IDataIntercept; * I6 c2 l+ S9 C) K
typedef System: elphiInterface<IDataIntercept> _di_IDataIntercept;
! I0 e/ X0 r4 P6 N8 K1 [ g__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn
' M8 e* S4 q: L; F7 Xtercept : public IUnknown
* k% @+ t3 N6 v1 h{
4 H2 P% f5 [4 h0 E9 C) Npublic: 5 n$ J( I9 B( Y" A
virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ; % v/ i# g' N6 v
virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
% \ e# @8 L) T9 Y6 t4 W8 G: O};
, _8 T" ^$ L9 o# h& k0 w/ [, G他在TSocketConnection类传送数据时会自动被使用 , e0 ^/ ?1 R' N* e
呵呵,用它实现数据完整性和保密性都是非常合适的选择
3 c- c/ a7 o. J0 ]. ]% u7 ]: R外加还可以对数据进行压缩,呵呵
2 g @9 _6 P$ w. `) W具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子 # C/ z9 F; k. o3 e
O9 b0 y$ s* ]0 O
MS对这几种安全机制的分类是高级别兼容低级别 8 k0 Q9 H/ |4 \3 C# @3 K4 A
实际上在我们自己使用的时候完全可以根据我们的需要 0 D1 }) G( H# C: i1 f2 e
自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
8 @# |' N' d8 D% V6 R9 x, i
3 b9 D2 V6 r8 Wbtw:本来想随便写写,发现好像很多问题都几句话说不清
0 M, P m( `0 u- P3 A ? 等到下个月有时间偶把这些东东好好总结一下写篇
7 `4 m' v* P. y* l( b 象样一点的文章出来,呵呵 5 S v/ l( [* B# m- c7 ^
% Q7 ~9 q. @9 A0 T% S% a. ?
其实这些安全模式的实现方式还有很多,偶只是挑出
! B4 o5 M. N& \1 U/ o+ r3 b5 x; F 偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵
0 p/ m- f! {* y 希望能够对大家有帮助,也希望大家积极讨论,批评指正 |