高难度的问题(关于midas/dcom的安全性),愿把家底全奉送!(45分)

  • 主题发起人 主题发起人 cjfandhf
  • 开始时间 开始时间
C

cjfandhf

Unregistered / Unconfirmed
GUEST, unregistred user!
刚才忘了换行,不容一阅读,我从发了!
我用ntserver+ sql server+remote data/socketconnection 作了一个
三层的程序。现在困惑(难、难、难,急、急、急)的一个问题是:别的用户,
只要知道appserver的IP,用DELPHI同样能访问,并且可以修改数据(虽然
DCOM配置可以限制访问用户类型,但只要能运行该程序的用DELPHI的
socketconnection就能看到你的remote data modul。)。
我想了很多办法如:在 socketconnect afterconnect event 调用remote
data 的过程校验,对第一个socket(或连接用户)有效,但只要appserver启
动,对以后的socket OPEN 就无效了。
我还尝试用borland socket server(scktsrvr.exe)的intercept guid,
但不起作用。如果用borland socket server(scktsrvr.exe)的intercept
guid 咋用?是不是socketconnection 的intercept guid 和scktsrvr.exe
的对应,我试过不对应也能open;请各位大侠指教!!!




 
你可以设一个方法Login
如果客户端不调用此方法(无权限)的话,
将所有的Provider的DataSet 设置为Nil
这不行了吗?
 
就是. 看到又如何? 看到不表示能访问嘛. 只能怪你的中间层没考虑安全问题!
我认为中间层应当控制与数据库的交互, 数据如何与数据库交换应该由中间
层实现, 而不是Client的事. 也就是说: Client根本不应该向中间层发送sql.
 
1、你对所有的数据源的Provider的Exported在设计时都设为False,即不向外
提供服务,
2、看看D5自带的一个Login示例,自己也做个Login,用户成功Login后,在程序
里把,Exported设为True,这样就能提供服务了。
3、这种方法在程序运行时最有效。别人知道什么都不要紧,只要不能读取数据
就达到目的。
4、如果对于自定义方法,则自己设一个标志,服务器接到请求后,先看它请求
的标志对不对,不对就返回,不做任何事。
经过上述处理后,应该可以防止别人使用你的Com Server了。
 
早知如此,何必..
同意 guojun
 
我作了一个login ,当客户端在 socket afterconnect里调用即:
socketconnection1.appserver.login(username,password);
username,password分别填充server端的database1(连接sql server)的params参
数。对第一个(即启动appserver的client)的socket有效,但对以后的无效了。
我想是不是server端 var user,pass:string;全局、局部的问题(我试了好象不是),问一下当第一个
调用了appserver.login('abc','guest')后,user:='abc',pass:='guest'了。
当另一个socket open时,user=?,pass=?;是不是公用 var user,pass.我的remote data modul instancing :multiple instance
threading:apartment;

server端login:
var
user,pass:string;
function Trdm.ogin(var str1, str2: WideString): WordBool;
begin
user:=str1;
pass:=str2;
end;

 
多人接受答案了。
 
to:Another_eYes
您说CLIENT不需要向中间件发SQL,那如何操作数据库呢,
如果把CLIENT想要数控给取回来呢,敬请指教.
 
最好再结合CLIENT端的IP地址进行过滤,可使安全性提高一个级别!
 
~{NRR2TZ?<BGUb8vNJLb#,6T~}guojun~{K55D7=7(SPRINJ!#~}
1~{!#GkNJ8C0Q7~NqFw5DO_3LD#J=Ih3IJ2C47=J=#?JG~}apartment~{Bp#?~}
2~{!#Hg9{UUDc5D7=7(#,V;R*SP:O7(SC;'7CNJAKR;1i#,DGC4FdK{SC;'JG7q>M?IRT?45=J}>]AK#?~}
 
后退
顶部