在pb开发的C/S结构程序中查看数据库密码,求解决方案

时间:2021-10-24 06:19:20
在我用pb写的程序,在测试中发现通过内存查看软件可以看到数据库的用户名(sqlca.userid)及密码(sqlca.logid),并且是明码!!!! 
也就是说这种c/S结构的程序,我安装后就可以通过内存查看器得到数据库的用户名及密码,问大家怎样解决! 
详细的查看方法为以下方式:
1、下载软件WinHex,并安装 
http://count.crsky.com/view_down.asp?down_url=http://5.jsdx1.crsky.com/200901/WinHex-v15.1sr-8H.rar&downd_id=26&ID=1683&SOFTID=1151&down=yes
2、运行pb开的C/S结构程序
3、打开软件在工具菜单中选择打开ram内存
4、选择运行的pb开发的程序,并打开primary memory
5、选择搜索-查找文件,并输入数据的用户名或者密码,按ok就可以检索到。
当然这个方法,在不知道数据用户及密码的状态下很难找到正确的,但有人做到了,所以我也很无奈,求各位高人指点一二。
我的邮箱为lihhsd@126.com, QQ911404 

26 个解决方案

#1


只要是想看,怎么也能看到!

这东西没有什么意义!


用户及密码不给用户你还让不让他们维护了!
你就能保证程序很完美吗?
大公司有的表结构甚至源程序都会给用户的!

#2


购买Sybase 的EAServer吧!

#3


引用 1 楼 jlwei888 的回复:
只要是想看,怎么也能看到! 

这东西没有什么意义! 


用户及密码不给用户你还让不让他们维护了! 
你就能保证程序很完美吗? 
大公司有的表结构甚至源程序都会给用户的!

不是管理员看到了,是普通用户也给查出来了

#4


可现在已经使用了sybase 12.5了
引用 2 楼 wag_enu 的回复:
购买Sybase 的EAServer吧!

#5


很强哈
引用楼主 lihhsd 的帖子:
在我用pb写的程序,在测试中发现通过内存查看软件可以看到数据库的用户名(sqlca.userid)及密码(sqlca.logid),并且是明码!!!! 
也就是说这种c/S结构的程序,我安装后就可以通过内存查看器得到数据库的用户名及密码,问大家怎样解决! 
详细的查看方法为以下方式: 
1、下载软件WinHex,并安装 
http://count.crsky.com/view_down.asp?down_url=http://5.jsdx1.crsky.com/200901/WinHex-v15.1sr-8H.rar&downd_id=26&ID…

#6



看了很多PB做的 C/S 程序的应用系统,他们的C端都是直接连接DB的. 
也就是要求 S 端的DB必须将相应的的端口暴露在网上如 SQL Server 的1433,这种结构本身存在很大的风险性. 
不要说是在打开了C 端的电脑上用密码查看器查密码,就是在没有安装C端的电脑上也有人能强行的登录的SQL Server. 

不知道哪位高手有没有办法改1433 为其它的端口号,并且C端怎么整也可以正常连接的. 

#7


上次还回复了你一下,用汉字或其它全角字符做密码吧.
我刚才试了一下,用汉字是这个效果:
在pb开发的C/S结构程序中查看数据库密码,求解决方案

估计要算出它是哪几个汉字,也多少有点难度!

#8


我测试了一下,sybase不支持汉字啊。
引用 7 楼 wag_enu 的回复:
上次还回复了你一下,用汉字或其它全角字符做密码吧. 
我刚才试了一下,用汉字是这个效果: 
 

估计要算出它是哪几个汉字,也多少有点难度! 

#9


引用 7 楼 wag_enu 的回复:
上次还回复了你一下,用汉字或其它全角字符做密码吧. 
我刚才试了一下,用汉字是这个效果: 
 

估计要算出它是哪几个汉字,也多少有点难度! 


您这不掩耳盗铃吗?
告诉你的编辑器,是UNICODE编码的就可以了.

#10


引用 8 楼 lihhsd 的回复:
我测试了一下,sybase不支持汉字啊。 


先在其它地方输入汉字,复制粘贴到密码处试试.

#11


XXX

#12


没搞清楚这个问题的讨论意义何在。

登陆的时候ID和pass有了,登陆成功后,清空ID和pass内容,一个二进制的工具怎么能够看到那些信息呢。

也测试了一下,找不到。



#13


讨论的原因在于普通用户可以看到数据库的用户名及密码。
我不清楚怎样清空ID和pass内容,请指教
引用 12 楼 jdsnhan 的回复:
没搞清楚这个问题的讨论意义何在。 

登陆的时候ID和pass有了,登陆成功后,清空ID和pass内容,一个二进制的工具怎么能够看到那些信息呢。 

也测试了一下,找不到。 

#14


我试了一下,连接后,清空了一样的可以搜索密码数据.

#15


不论你怎么清,人家在你CONNECT前下断(你CONNECT的时候总要给个真的密码吧),你总是很难逃过去.

这个问题,我小时候还在河边玩沙的时候就开始想,想到现在头发都掉光了.还是想不出一个非常非常完善的办法.

#16


很多年以前,我见过人家有办法写的,那时候看不出来他是怎么做的.

不过我估计知道的人不会告诉你

因为加密,不外乎,算法+密钥,公开或通用的算法,依赖密钥的保密性.如果你不能完全保证密钥的安全,就只能在算法上做障眼法.这种自己设计的算法,强度非常非常弱,所以它不能公开,才有机会出其不意.


#17


jdsnhan的方法可行,99年我写过的类库中就有这个功能...
14楼说的原因在于程序问题.同时你做测试也太潦草了些....
15楼说的下断的方式原因也在于程序-某些特定类型的程序可以下断点,如果在程序中有专门应对处理,下断根本无从做起......

#18


引用 17 楼 SOFTFUN_CSDN 的回复:
jdsnhan的方法可行,99年我写过的类库中就有这个功能... 
14楼说的原因在于程序问题.同时你做测试也太潦草了些.... 
15楼说的下断的方式原因也在于程序-某些特定类型的程序可以下断点,如果在程序中有专门应对处理,下断根本无从做起...... 


我是15楼,所以我说,"想不出一个 非常非常完善的办法"

我想得出的来的办法是依靠算法来做障眼的(道理上,依靠保密算法来保证安全的,基本就不是好算法),所以没办法公布它.

#19


这个好办,你可以这样处理

sqlca.logid      = 'user'
sqlca.logpass    = 'china_aaa'
connect;
if sqlca.sqlcode = 0 then
   sqlca.logid = '******'
   sqlca.logpass = '******'
else
   halt
endif

在连接成功后,把logid及logpass赋值为*即可

这样的话,在内存中看到的都是*了

#20


另外建数据库用户,不要用sa,dba之类的超级用户来连接,然后将客户端用户加密,不知道用户名,就不好搜索了吧

#21


加密,或者采用伪码

#22


引用 19 楼 lzp_lrp 的回复:
这个好办,你可以这样处理 

sqlca.logid      = 'user' 
sqlca.logpass    = 'china_aaa' 
connect; 
if sqlca.sqlcode = 0 then 
  sqlca.logid = '******' 
  sqlca.logpass = '******' 
else 
  halt 
endif 

在连接成功后,把logid及logpass赋值为*即可 

这样的话,在内存中看到的都是*了 

我试过了,不行的,他实际上是将连接后的对像放入内存中了

#23


做3层吧。
不要让客户端直接链接数据库。
做一个中间服务端。
只有通过中间服务端链接服务器。
客户端需要什么数据就从中间服务端读取。
性能可能会受点影响。

#24


同意楼上,cs 架构安全性方面先天不足,再怎么搞也难以保证安全,尽快转向三层吧。

#25


还是做三层吧,因为数据库连接本身就是明文在传送啊。

#26


每个用户分配一个数据库的用户,根据用户输入的用户名,密码来连接数据库
说实话,就算让用户进数据库也无所谓,难道用户还能不用你的软件直接在数据库里操作

#1


只要是想看,怎么也能看到!

这东西没有什么意义!


用户及密码不给用户你还让不让他们维护了!
你就能保证程序很完美吗?
大公司有的表结构甚至源程序都会给用户的!

#2


购买Sybase 的EAServer吧!

#3


引用 1 楼 jlwei888 的回复:
只要是想看,怎么也能看到! 

这东西没有什么意义! 


用户及密码不给用户你还让不让他们维护了! 
你就能保证程序很完美吗? 
大公司有的表结构甚至源程序都会给用户的!

不是管理员看到了,是普通用户也给查出来了

#4


可现在已经使用了sybase 12.5了
引用 2 楼 wag_enu 的回复:
购买Sybase 的EAServer吧!

#5


很强哈
引用楼主 lihhsd 的帖子:
在我用pb写的程序,在测试中发现通过内存查看软件可以看到数据库的用户名(sqlca.userid)及密码(sqlca.logid),并且是明码!!!! 
也就是说这种c/S结构的程序,我安装后就可以通过内存查看器得到数据库的用户名及密码,问大家怎样解决! 
详细的查看方法为以下方式: 
1、下载软件WinHex,并安装 
http://count.crsky.com/view_down.asp?down_url=http://5.jsdx1.crsky.com/200901/WinHex-v15.1sr-8H.rar&downd_id=26&ID…

#6



看了很多PB做的 C/S 程序的应用系统,他们的C端都是直接连接DB的. 
也就是要求 S 端的DB必须将相应的的端口暴露在网上如 SQL Server 的1433,这种结构本身存在很大的风险性. 
不要说是在打开了C 端的电脑上用密码查看器查密码,就是在没有安装C端的电脑上也有人能强行的登录的SQL Server. 

不知道哪位高手有没有办法改1433 为其它的端口号,并且C端怎么整也可以正常连接的. 

#7


上次还回复了你一下,用汉字或其它全角字符做密码吧.
我刚才试了一下,用汉字是这个效果:
在pb开发的C/S结构程序中查看数据库密码,求解决方案

估计要算出它是哪几个汉字,也多少有点难度!

#8


我测试了一下,sybase不支持汉字啊。
引用 7 楼 wag_enu 的回复:
上次还回复了你一下,用汉字或其它全角字符做密码吧. 
我刚才试了一下,用汉字是这个效果: 
 

估计要算出它是哪几个汉字,也多少有点难度! 

#9


引用 7 楼 wag_enu 的回复:
上次还回复了你一下,用汉字或其它全角字符做密码吧. 
我刚才试了一下,用汉字是这个效果: 
 

估计要算出它是哪几个汉字,也多少有点难度! 


您这不掩耳盗铃吗?
告诉你的编辑器,是UNICODE编码的就可以了.

#10


引用 8 楼 lihhsd 的回复:
我测试了一下,sybase不支持汉字啊。 


先在其它地方输入汉字,复制粘贴到密码处试试.

#11


XXX

#12


没搞清楚这个问题的讨论意义何在。

登陆的时候ID和pass有了,登陆成功后,清空ID和pass内容,一个二进制的工具怎么能够看到那些信息呢。

也测试了一下,找不到。



#13


讨论的原因在于普通用户可以看到数据库的用户名及密码。
我不清楚怎样清空ID和pass内容,请指教
引用 12 楼 jdsnhan 的回复:
没搞清楚这个问题的讨论意义何在。 

登陆的时候ID和pass有了,登陆成功后,清空ID和pass内容,一个二进制的工具怎么能够看到那些信息呢。 

也测试了一下,找不到。 

#14


我试了一下,连接后,清空了一样的可以搜索密码数据.

#15


不论你怎么清,人家在你CONNECT前下断(你CONNECT的时候总要给个真的密码吧),你总是很难逃过去.

这个问题,我小时候还在河边玩沙的时候就开始想,想到现在头发都掉光了.还是想不出一个非常非常完善的办法.

#16


很多年以前,我见过人家有办法写的,那时候看不出来他是怎么做的.

不过我估计知道的人不会告诉你

因为加密,不外乎,算法+密钥,公开或通用的算法,依赖密钥的保密性.如果你不能完全保证密钥的安全,就只能在算法上做障眼法.这种自己设计的算法,强度非常非常弱,所以它不能公开,才有机会出其不意.


#17


jdsnhan的方法可行,99年我写过的类库中就有这个功能...
14楼说的原因在于程序问题.同时你做测试也太潦草了些....
15楼说的下断的方式原因也在于程序-某些特定类型的程序可以下断点,如果在程序中有专门应对处理,下断根本无从做起......

#18


引用 17 楼 SOFTFUN_CSDN 的回复:
jdsnhan的方法可行,99年我写过的类库中就有这个功能... 
14楼说的原因在于程序问题.同时你做测试也太潦草了些.... 
15楼说的下断的方式原因也在于程序-某些特定类型的程序可以下断点,如果在程序中有专门应对处理,下断根本无从做起...... 


我是15楼,所以我说,"想不出一个 非常非常完善的办法"

我想得出的来的办法是依靠算法来做障眼的(道理上,依靠保密算法来保证安全的,基本就不是好算法),所以没办法公布它.

#19


这个好办,你可以这样处理

sqlca.logid      = 'user'
sqlca.logpass    = 'china_aaa'
connect;
if sqlca.sqlcode = 0 then
   sqlca.logid = '******'
   sqlca.logpass = '******'
else
   halt
endif

在连接成功后,把logid及logpass赋值为*即可

这样的话,在内存中看到的都是*了

#20


另外建数据库用户,不要用sa,dba之类的超级用户来连接,然后将客户端用户加密,不知道用户名,就不好搜索了吧

#21


加密,或者采用伪码

#22


引用 19 楼 lzp_lrp 的回复:
这个好办,你可以这样处理 

sqlca.logid      = 'user' 
sqlca.logpass    = 'china_aaa' 
connect; 
if sqlca.sqlcode = 0 then 
  sqlca.logid = '******' 
  sqlca.logpass = '******' 
else 
  halt 
endif 

在连接成功后,把logid及logpass赋值为*即可 

这样的话,在内存中看到的都是*了 

我试过了,不行的,他实际上是将连接后的对像放入内存中了

#23


做3层吧。
不要让客户端直接链接数据库。
做一个中间服务端。
只有通过中间服务端链接服务器。
客户端需要什么数据就从中间服务端读取。
性能可能会受点影响。

#24


同意楼上,cs 架构安全性方面先天不足,再怎么搞也难以保证安全,尽快转向三层吧。

#25


还是做三层吧,因为数据库连接本身就是明文在传送啊。

#26


每个用户分配一个数据库的用户,根据用户输入的用户名,密码来连接数据库
说实话,就算让用户进数据库也无所谓,难道用户还能不用你的软件直接在数据库里操作