大家都知道,使用RemoteDataModule最令人头疼的就是安全性问题。
主要体现在:
1、远端只要知道应用服务器的端口号即可访问到应用服务器,而一旦访问到应用服务器,TClientDataSet即可获得ProviderNames列表。(观点:不让他轻易得到ProviderNames列表。)
2、一旦知道了ProviderNames列表,这就相当于将数据库暴露在外了。
例如:客户端可以通过SQL语句来对数据库进行 *** 作了。(观点:我们的应用服务器根部不接受SQL语句。)
因为看到大家此类贴多如牛毛,又没有什么更好的解决方法,因此我发表一下我的拙见。
我对IAppServer接口进行了进一步的扩展,增强了RemoteDataModule的安全性。主要体现在:
客户端侦测到应用服务器的端口号可以建立与应用服务器的连接,但必须提供由TClientDataSet提供一GUID作为密码方能在设计阶段获得ProviderNames列表。此功能使得系统外部人员无法在设计阶段直接在TClientDataSet的ProviderName中直接获得应用服务器的TProvider实例。如果想通过IAppServer来获取ProviderNames列表则必须提供这一特定的GUID作为密码。
IAppServer的AS_GetProviderNames原形为
function AS_GetProviderNames: OleVariant; safecall;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)