单位开发一套管理系统(三层),一日,同事和我说,他可以自己编程来修该数据库(晕)他简单的加了几个控件,靠,真的连接到应用服务器端,而且可以任意修改数据!仔细想想

  • 主题发起人 主题发起人 zhousi
  • 开始时间 开始时间
一般来说可以有三种方法:
1.在remote date Module的oncreate事件中进行处理;
2.如果使用socket通信,那么最好使用interceptor技术(拦截技术),例子可参看/demos/midas/intrcpt目录。
3.也可以在dataprivoder的BeforeGetRecords中对数据进行加密,参看联机帮助。
 
最好是自己定义一套通讯协议,一切搞定!
 
来自:keepyea, 时间:2002-6-13 18:22:00, ID:1161670
你這個三層,不用看也知道,是屬於那種沒事找事的數據轉發的三層,
永遠不會用到宣揚的無數種三層的好處的那種三層,別人當然一連就上去了。

说的不错。
请你谈谈该如何做吧,关注。
 
服务器端的PROVIDER有一个选项:AllowCommandText,就是用来控制不让未经授权的用户随便
向服务器发送SQL脚本用的。你只需要利用这个东西做文章就可以解决了。
 
为了DCOM的安全,最好是删除guest用户
 
可以用权限控制的。
 
其实任何基于身份验证的系统,如果不和登录人的生理特征联系起来,都是不可靠的,
因为最大的隐患在于内部人员,攻破内部管理人员是进入系统最直接,最经济,最有效的方法,
[:D]
 
做程序不能防止内盗,程序是死的,只认字符。当然你用美女干倒数据库管理员,同样
可以拿到数据,但请别说是用美女干倒了计算机程序。
Delphi中最直接的控制方法就是在做服务器时把所有 DataSetProvider.Exported := false
想问一下,谁还能连上?只要再对正确进入服务器的人,开启就可以了。
至于自定义方法,要自己建立用户验证机制。
 
这是因为你根本没有作权限控制 :-(
 
同意guojun的意见
 
1.在应用服务器中加入远过程函数调用(如login函数),客户端调用该接口即可。具体例子参考/demos/midas/login
2.使用interceptor技术(拦截技术),例子可参看/demos/midas/intrcpt目录。
 
下面是intercpt.dll动态连接的源代码.(方法datain和dataout功能是拦截数据
对数据进行加密和压缩 ).生成动态连接库以后.不知道如和调用atain和dataout;
还有 DataOut(const Data: IDataBlock);参数data如何设置?
1: regsrv32 /path/intercpt.dll 可以通过在setupfactory中建立安装程序注册intercpt.dll
2: 在scktsrvr.exe中的各个端口中,那个Intercept GUID:GUID加上intercpt.dll的GUID
就是上面程序中的:
const
Class_DataCompressor: TGUID = '{B249776C-E429-11D1-AAA4-00C04FA35CFA}';
//此值可以修改,只要客户端、服务器和intercpt.dll的注册值保持一致。
3:在你的客户端中的SocketConnection的属性中intercpt的值也是这个GUID.
这就行了
scktsrvr中的TServerSocket已经对这个压缩和解压已经封装,只需要对intercpt.dll进行
注册即可。
注意第一个步骤,在客户端中也在进行注册。
在scktsrvr.exe中的扩展TServerSocket中,它是调用TSocketTransport中的FInterceptor: IDataIntercept
而这个FInterceptor是根据用户注册的IDataIntercept接口来创建的。
Datain, Dataout是集成在IDataIntercept接口中的,所以不用单独调用。
而我们所要做的是对IDataintercept接口进行接口的实现(也就是写个类来实现接口的函数
和过程),在scktsrvr中它是自动根据这个GUID调用的。
ServerSocket.InterceptGUID --> SocketTransport.InterceptGUID.
SocketTransport:
if FInterceptGUID <> '' then
Guid := StringToGuid(FInterceptGUID);
//这里将创建一个你注册了的COM对象,也就是你写的对IDataIntercept的实现类
FInterceptor := CreateComObject(Guid) as IDataIntercept;
在数据传输时,
if Assigned(FInterceptor) then
//这里就调用你写的类中的方法
FInterceptor.Datain(Data) //or FInterceptor.DataOut(Data)


下面是数据传输加密部分关键代码,把他写入intercpt.dll,重新编译
procedure Encode(SrcStream: TStream);
var
Buffer : TMemoryStream;
Ch : byte;
begin
if SrcStream.Size=0 then
exit;
// 内部创建临时的缓冲区,结果写回SrcStream, 也可以外部传入DstStream接收结果。
Buffer := TMemoryStream.Create;
try
SrcStream.Position := 0;
// 原来这里用<>判断是一个危险的方式,因为它可能会导致死循环或异常
while SrcStream.Position < SrcStream.Sizedo
begin
SrcStream.Read(Ch,1);
Ch := Ch XOR Ord('a');
Buffer.Write(ch,1);
end;
Buffer.Position := 0;
SrcStream.Size := 0;
SrcStream.CopyFrom(Buffer, 0);
finally
Buffer.Free;
end;
end;

procedure Decode(SrcStream: TStream);
var
Buffer : TMemoryStream;
Ch : byte;
begin
if SrcStream.Size=0 then
exit;
Buffer := TMemoryStream.Create;
try
SrcStream.Position := 0;
while SrcStream.Position < SrcStream.Sizedo
begin
SrcStream.Read(Ch,1);
Ch := Ch XOR Ord('a');
Buffer.Write(ch,1);
end;
Buffer.Position := 0;
SrcStream.Size := 0;
SrcStream.CopyFrom(Buffer, 0);
finally
Buffer.Free;
end;
end;
 
http://www.delphibbs.com/delphibbs/DispQ.asp?LID=1354567
关注一下吧没有人提起来呀!用MODEM打电话利用PC机的耳机和麦克风,自己编程如何实现?
(我知道有现成的软件可以用,但是我想自己实现这个上东西)
QQ:65466700
MAIL: along@b2sun.com
TEL :13802785865
http://b2sun.com
请各位大侠多多指教!
 
理论上应该把业务规则封装在中间层,并不是由客户端去执行SQL,客户端只是调用应用服务器的
方法而已!并且在建立与应用服务器连接时候应该有验证!向你同事这样作绝对漏洞百出
 
这个问题我也在此问了一个月,结果,没得到什么好的答案,
所以后来,我改用soapserver了
 
这么牛B。我不知道能怎么必。他联上了我的APP的接口,但不知我的函数及参数啊,怎么调用
再说,应用服务器不让从客户端执行SQL,你怎么改数据库
你同事所做的操作只能在他自已开发的中间层上黑数据库服务器吧
 
呵呵,你们干吗不加连接验证?
 
这个问题我试过了成功了。是这样笨方法的。
function TOAServer.UserLogin(var UserLoginName, PassWord,
CardNum: OleVariant): OleVariant;
var USerName,USerPass,UCardNum:String;
begin
bLogined:=Frm_Main.CheckUser(UserLoginName, PassWord,CardNum);
end;
procedure TOAServer.qryBrowBeforeOpen(DataSet: TDataSet);
var adoqry:Tadoquery;
begin

if bLogined= false then
abort;
end;
procedure TOAServer.dspLUserBeforeExecute(Sender: TObject;
var OwnerData: OleVariant);
begin
//如果没有登录的,不给它运行。
if bLogined=False then
abort;
end;

 
请问楼上的兄台:
你的bLogined是全局变量吗?如果同时有几个用户登陆,他们是共享这一个变量吗?会不会有问题.
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部