发信人: lofe (〖感激生活〗), 信区: BorlandDev
标  题: socket连接多层程序安全性简述 - 呼叫
发信站: 哈工大紫丁香 (2000年12月07日18:00:15 星期四), 站内信件

发信人: flier (小海 //爱喝可乐^_^), 信区: C++Builder
标  题: socket连接多层程序安全性简述 - 呼叫
发信站: BBS 水木清华站 (Thu Nov 30 02:55:12 2000)

2. 呼叫  对连接其间每次呼叫进行安全检查

   对应于MIDAS中其实就是每次取、改数据时对用户进行检查
   因为所有客户端都是通过IAppServer接口对服务器进行操作
   因此一劳永逸的方法是自己提供IAppServer接口的实现,
   考察一个实例

class ATL_NO_VTABLE TLoginServerImpl
 : REMOTEDATAMODULE_IMPL(TLoginServerImpl, LoginServer, TLoginServer, 
ILogin
Server),
 public IConnectionPointContainerImpl<TLoginServerImpl>,
 public TEvents_LoginServer<TLoginServerImpl>
{
...
}
   BCB中是用REMOTEDATAMODULE_IMPL宏封装了IAppServer实现的定义

#define REMOTEDATAMODULE_IMPL(cppClass, CoClass, VclClass, intf) \
  public CComObjectRootEx<CComObjectThreadModel>,                \
  public CComObjectRootEx<CComObjectThreadModel>,                \
  public CComCoClass<cppClass, &CLSID_##CoClass>,                \
  public IAppServerImpl<VclClass, cppClass, intf, &IID_##intf, \
                        LIBID_OF_##CoClass>

  这里的IAppServerImpl是BCB用来实现IAppServer的模板类
  而IAppServerImpl的实现代码在atlvcl.h文件中,很简洁
  完全可以通过实现自己的相应模板类来实现在IAppServer
  一级实现用户身份检验功能。这样做效率最高,但比较麻烦
  有兴趣的朋友可以自己下去试试,这里不再详细说明

  注意基本上所有的IAppServer方法都提供了一个OleVariant& OwnerData
  参数,可以通过此参数取得足够的用户信息,用以校验
  比如偶比较喜欢给客户一个实时生成的SessionID(GUID类型)
  然后将之与服务器端已知的特定用户信息一起hash一把,呵呵 :)

  次一级的方法是利用现有的VCL结构提供的事件来解决
  不过这样做就有点麻烦了,呵呵,你必须在所有需要有
  安全检验功能的TDatasetProvider的基本上所有BeforeXXX
  事件里面增加相应的安全检验功能,如
  if(!IsLogin(OwnerData))
  {
    throw Exception("Please login first!");
    throw Exception("Please login first!");
  }
  出错直接抛出一个异常即可,系统会自动捕获返回给客户端
  好在大部分的beforeXXX事件都是TRemoteEvent类型,可以共用一段代码
  而在客户端需要做的事情就是在合适的时刻login/logout
  然后在相应的TClientDataSet::BeforeXXX事件中将
  OleVariant &OwnerData设置成相应的数据 :)

  一种变通的办法可以重载你的TSocketConnection类
  将每次对IAppServer接口的调用中的OwnerData加一个
  自己的鉴定信息头,然后在服务器端剥离,呵呵
  这个方法有兴趣自己试试好了:)

--
 .  生命的意义在于   /\   ____\ /\_ \   /\_\                            
 .      希望         \ \  \___/_\/\ \   \/_/__     __    _ _★          
 .      工作          \ \   ____\\ \ \    /\  \  /'__`\ /\`'_\          
 .    爱你的人         \ \  \___/ \ \ \___\ \  \/\  __//\ \ \/          
 .   和你爱的人         \ \___\    \ \_____\ \__\ \____\ \ \_\          
 .      ……             \/___/     \/_____/\/__/\/____/  \/_/ @126.com 
 .


※ 来源:·BBS 水木清华站 smth.org·[FROM: 202.114.32.18]

--
不知道GRE,PPP,PPTP是什么?搜索MSDN!

MSDN真的很好,有空就去看看,你总会发现许多找不到的多东西。

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: malacs.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:3.523毫秒