|
socket连接多层程序安全性简述 - 数据
* t1 o$ r$ l# h" f" g4 k/ n, e+ B , I; a8 j0 |6 c" @" ~: d1 Y
剩下三种数据包/数据包完整性/数据包保密性
; I* ^+ y8 G5 H) \; Q其实只是一种安全机制的不同级别实现而已 $ s) [) N) a1 S- X( p# p+ {
数据包对发送者的身份加密,完整性和保密性
# U9 c( g. K! O; b5 E/ J6 |* H是对其的有益补充 * G& Q# c6 u! X. o
" s2 k+ \3 S; G8 Q* M- g
实际上数据包模式对发送者身份加密实现方法任意
; w& ~; {% ~0 {1 H/ R比如可以用Windows提供的那套加密库 ( z5 g8 H# E) l! d1 v& G4 Q& @
呵呵,反正只要你在服务器端对其进行检验
! ~- P' S1 t# O4 g( D. d/ T2 m传送中途数据包被截留不会泄露发送人身份或
$ M0 m/ H8 X. E" c可以证明发送人身份的数据即可
" r7 c1 c4 E- }1 x* Z' n2 b8 K 3 \$ Y, C8 W: @. H
而完整性可以通过各种算法保证,比如crc,md5都是 % {& S& x2 w* @9 l
可行的,甚至简单一点按位and/or也不失一种办法 4 {+ K% Y& E, b# D' A' x
只是比较简陋罢了,呵呵,总之要保证数据不会被
6 B: C! e& F4 M, M- u中途截留者更改
6 T' i$ ^" o6 F
, x( O" I8 C5 |' v. T9 O1 j4 M至于保密性,找一种对称加密算法对全部数据进行
4 F6 N" t$ ?% H& l2 |1 M. `. A% O加密,然后将密匙用另外的非对称算法再次加密即可 $ B k' q' g2 O" m( d
具体这方面的安全考虑问题可以看看《应用密码学》
* S! ?$ F8 Y0 u" p4 c一书,非常不错的这方面的权威书籍
" Y, L) f. Y3 J2 Y# B
6 S' B; t) i t! I3 y这里需要提及的是这三种模式的实现,
7 a9 B5 ]& u9 k5 k2 |, N' A简单一点的可以类似上一个呼叫模式中 + _. G! ^2 o- X( x- `9 e
在IAppServer::AS_GetRecords或者
( W& E9 s3 a N3 t4 H, j其他类似的事件里面实现,参见上篇文章 * q, q1 W9 D% b' g
2 V: A2 b. ]$ n: h' \不过很幸运的是borland提供了一种更加简单可行的方案 ' \3 X1 Y- s i4 }
IDataIntercept接口
+ h% H; _8 S) N/ M. _) D5 T 5 j- ?1 K, g8 c# j% ]' W
__interface IDataIntercept;
; t3 v# n0 W9 Z* qtypedef System: elphiInterface<IDataIntercept> _di_IDataIntercept;
" s/ F/ M1 B- d h; m__interface INTERFACE_UUID("{B249776B-E429-11D1-AAA4-00C04FA35CFA}") IDataIn $ S' ^% U" s' X/ E$ H! u% {$ E
tercept : public IUnknown 0 P+ v* T/ `+ B5 r2 s
{
* O( K8 f' X0 G7 Y) zpublic:
{" L4 I1 l& s" W ] virtual void __stdcall DataIn(const _di_IDataBlock Data) = 0 ;
" g6 S# f' j$ x/ E. Y0 T0 [1 I virtual void __stdcall DataOut(const _di_IDataBlock Data) = 0 ;
6 m4 t* _( l5 [" n};
! V5 |5 Y b1 |. k他在TSocketConnection类传送数据时会自动被使用
S1 v. t3 K+ ^呵呵,用它实现数据完整性和保密性都是非常合适的选择 8 r0 [1 T( v% T8 R% T
外加还可以对数据进行压缩,呵呵 5 g' f9 [ X5 Z/ H- {9 p+ }* w3 D
具体使用可以看看Delphi5\Demos\Midas\Intrcpt\目录的例子 & Y8 w- I, ~ B3 x, e
% o/ S S4 W' K; J4 Q2 d
MS对这几种安全机制的分类是高级别兼容低级别 7 V& o1 t& W, x, t2 z
实际上在我们自己使用的时候完全可以根据我们的需要
+ z& ~4 W4 w5 V: u自己灵活混合几种机制进行处理,选择最适合自己项目的解决方案
' H; V# ~) X7 K; S- U& J# Y( m " @: ?) o3 v7 H4 l ?1 ]) p
btw:本来想随便写写,发现好像很多问题都几句话说不清 " i) {5 C" W. N, i* X
等到下个月有时间偶把这些东东好好总结一下写篇
7 `6 @: W3 G8 x 象样一点的文章出来,呵呵 # t' O8 O& w9 g0 L9 o! Q& ]
* f0 t. M! |& u; _( f
其实这些安全模式的实现方式还有很多,偶只是挑出
. \! o! m1 n7 H 偶比较熟悉的比较容易说清楚的介绍,简介嘛,呵呵 , k# y1 R' E& d3 m% M- S0 J5 c
希望能够对大家有帮助,也希望大家积极讨论,批评指正 |