http://www.csdn.net/Develop/read_article.asp?id=24859
欢迎大家在此提出自己的见解。
欢迎大家在此提出自己的见解。
解决方案 »
- 今遇到一个超级怪现象,请大侠们支支招
- 100分__新手急问_控件安装问题!谢谢!
- 放分200支持menggirl做版主——leeon
- 请教:有没有象tlistbox一样的控件,每行能显示不同颜色?
- 关于DLL 的问题
- 欢迎光临,怎样把汇编程序转化为Delphi愿代码?例子如下:
- 用Delphi可否自制安裝程序
- 老大们,我在做SOAP时出现了这个错误,求大家帮忙,分不够可以加
- 请问大家开发是采用什么 方式?是否有采用主程序+DLL的?
- RAD Studio 10.2 FMX程序,MediaPlayer.Play以后,定时器查询State总是为Playing,即使已经播放完了(win平台))
- 一个不要钱的电子书站,真的,不错的,挺全面的
- 简单问题.
procedure checkLogin(const UserName, Password: WideString); safecall;
定义一个全局变量LoggedIn为 boolean
获取数据时检查LoggedIn是否为真
在checkLogin内容为以下procedure TXXX.Login(const UserName, Password: WideString);
begin
{
检测UserName,Password 是否为安全用户
... }
{如果成功}
LoggedIn := True;
{否则}
LoggedIn := false;
raise Exception.Create('Not logged in');
end;客用端以DCOM为例 如下在 dcom onlogin 事件中加入
DCOMConnection1.AppServer.Login(UserName, Password);
这样就可以防止只要知道DCOM GUID就可以连接到服务器上的安全问题
把 TDataSet 和 TProvider 连接起来
把 TDataSet 和 TConnection 连接起来
设置 TDataSet.SQL
login方法也比较好,
实际上来说,最简单的是设一个标志变量,
第一次读取数据时,如果是发送的密码是正确的,就改标志为true,
以后在每次Before操作时,比较一下就可以了,
当然,所有的DataSet都可以用同一个方法,呵
黑客可以绕过你的应用程序直接对数据库或操作系统的缺陷进行攻击。
这和MIDAS没有关系。
我的中间层实际上是一个dataset和TdatasetProvider都没有
我在中间层定义了一个dataset和tdatasetprovider的动态数组
然后定义一个createprovider方法和destroyprovider方法
在需要时,由客户端调用createprovider动态生成一个,不要时调用destroyprovider释放掉
这样客户端在设计时间是不可能得到中间层的datasetprovider的
并且中间层也不需要保持那么多的datasetprovider占用过多的内存
即然RemoteDataModule是一个COM组件,
那么就能用上COM/COM+的安全解决方案,
procedure checkLogin(const UserName, Password: WideString); safecall;
定义一个全局变量LoggedIn为 boolean
获取数据时检查LoggedIn是否为真
在checkLogin内容为以下procedure TXXX.Login(const UserName, Password: WideString);
begin
{
检测UserName,Password 是否为安全用户
... }
{如果成功}
LoggedIn := True;
{否则}
LoggedIn := false;
raise Exception.Create('Not logged in');
end;客用端以DCOM为例 如下在 dcom onlogin 事件中加入
DCOMConnection1.AppServer.Login(UserName, Password);
这样就可以防止只要知道DCOM GUID就可以连接到服务器上的安全问题谈谈我的作法吧(不好请不要扔砖头,要扔也要扔金币).Client通过 AppServer.Login 实现登录验证过程,在此过程中,确认了合法用户后,再
把 TDataSet 和 TProvider 连接起来
把 TDataSet 和 TConnection 连接起来
设置 TDataSet.SQL
//-----------------------------综合以上两位仁兄的方法,
实际中,我们也在项目中采用前提:
远程数据模块(必需是多实例,部分线程模式,这个很重要)
远程数据模块中,所有dataset 跟connection 是断开的,也就是说默认不连接数据库。
然后构建成一个login方法
procedure TXXX.Login(const UserName, Password: WideString);
begin
if
{
检测UserName,Password 是否为安全用户
... } then
begin
{如果成功}
设置,所有DATAset 指向正确的 connection.
end;
{否则..什么事情也不做}
end;
1.可以参照\Demos\Midas\Intrcpt的例子加密数据,使用InterceptGUID
2.RDM不输出DataSetProvide,全通过调用RDM的函数实现,对于函数可以只调用一个公用函数,重写TClientdataset
有兴趣的可以参看
http://search.csdn.net/expert/topic/53/5310/2003/10/18/2368941.xml中的讨论
解决。关键是scktsrvr,大家还是想办法改它比较好一点.
http://search.csdn.net/Expert/topic/2368/2368941.xml?temp=.1435968
应该就安全多了,集成ScktSrvr 到应用程序,只允许访问内部COM对象,防止访问系统其它对象将访问限制到接口,不允许出现万能接口,或者越权访问的接口