应用程序保存数据库连接配置可能出现的一个安全隐患

原创 2007年09月27日 17:32:00

对于数据库应用程序,我们通常需要保存连接到数据库的服务器名称,用户名、密码等数据,而这些数据我们通常都是要进行加密处理的,因为显而易见,存储为明文将会导致密码的泄漏,影响数据的安全性!

现在问题来了,我们如何才能安全的保存 我们的用户名和密码呢?

 通常情况下,我们采用这样的办法来保存连接的信息。

 

Public Sub SaveDBToFile()
  
Dim sw As New IO.StreamWriter("db.cfg")
  sw.WriteLine(ServerName)
  sw.WriteLine(UserName)
  sw.WriteLine(Password)
  sw.Close()
End Sub
这里有一个问题,就是密码信息我们没有加密存储,这个时候用户打开这个配置文件,就会找到数据库连接的真实密码。所以我们增加了一个加密的函数,来进行加密处理。

 

 

Public Function Encrypt(ByVal Str As StringAs String
  
' 这里仅仅表示一个测试。直接返回了这个字符串。
  Str = Str
  
Return Str
End Function
然后我们需要修改保存的数据库配置方法,就是那个SaveDBToFile()过程。修改后的代码如下:

 

 

Public Sub SaveDBToFile()
  
Dim sw As New IO.StreamWriter("db.cfg")
  sw.WriteLine(ServerName)
  sw.WriteLine(UserName)
  sw.WriteLine(Encrypt(Password))  
' 对密码进行加密处理。
  sw.Close()
End Sub
很好,这里我们已经对密码进行了加密处理,密码已经被我们加密了。的确在这里也没有问题。

 

但是,如果你出现了和我以前有过的一样想法,那可能就要犯错误了。我的想法是,这样的简单加密密码还不是很安全,如果偷窥密码的人,连我的服务器名称、连接数据库的用户都不知道的话,岂不是更加安全了?好,说做就做,我们把服务器名称、连接用户名和密码统统加密,我看你还能怎么样?光知道我的用户名,密码你就猜吧!现在连我的用户名,你都不知道,我看你还猜什么!

修改后的保存数据库配置信息过程如下:

 

Public Sub SaveDBToFile()
  
Dim sw As New IO.StreamWriter("db.cfg")
  
' 服务器名称、用户名和密码全部都加密处理!
  sw.WriteLine(Encrypt(ServerName))
  sw.WriteLine(Encrypt(UserName))
  sw.WriteLine(Encrypt(Password))
  sw.Close()
End Sub
我们以为这样很安全了,而且我在一些软件里面也是这样做的,但是很有可能,用一种简单的办法就可以破解你的连接信息,因为很简单,你的这些密码配置应该是通过你的应用程序来做的,也就是说,程序应该提供一个窗口(或者别的什么控件)给用户(或者说管理员)来设置连接的用户信息。而我们在这个窗口里面通常是提供了三个TextBox控件为用户进行配置信息输入,并且通常我们都会把密码文本框设置为仅仅显示*号,而其他文本框是正常的文本显示。

 

现在对这个连接配置文件进行一下小小的改动,用记事本打开它,把这个文件的第三行和第二行内容进行对调,重新启动我们的应用程序,结果数据库连接不上了,我们需要重新设置数据库连接,打开数据库连接配置窗口,发现用户名那个文本框的内容,出现了我们以前设置的密码!!!

好了,这里我们出现了问题,那么如何解决呢?

有一种办法,就是“见好就收”,就是我们使用的第一种方法,仅仅加密密码,对于服务器名称和用户名称不加密。如果你觉得这种方法不太安全,还是要让这些偷窥者们不知道你的用户的情况下来猜测密码,那么就让你保存的文本可以表示出这一行是什么含义,也是说我们的程序读取这个文本的时候,可以知道这一行保存的是服务器名称还是用户的密码。我们尝试将保存办法修改如下:

Public Sub SaveDBToFile()
  
Dim sw As New IO.StreamWriter("db.cfg")
  
' 服务器名称、用户名和密码全部都加密处理!
 sw.WriteLine(Encrypt("S=" & ServerName))  ' S开头表示这个是服务器名称
  sw.WriteLine(Encrypt("U=" & UserName))    ' U开头表示这个是用户名
  sw.WriteLine(Encrypt("P=" & Password))    ' P 开头代码这个是密码
  sw.Close()
End Sub

我们程序在读取的时候,首先将数据行解密,然后根据解密后的字符串起始字符来判断该文本的含义。

(这个是我最近的一些小感想,希望大家可以发表自己的意见!)

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

字符编码带来的安全隐患——一个谷歌XSS漏洞

本文翻译自 http://shiflett.org/blog/2005/dec/googles-xss-vulnerability 多年以前谷歌曾爆出一个XSS漏洞证明了字符编码设置的重要性。 但...

避免CI成为一个安全隐患

背景最近临时交接了一个客户测试环境和产品环境的维护工作。交接的客户资产包含:代码库、生产环境主机、测试环境主机、搭建在测试环境主机上的持续集成服务器以及对应的账号密码。这个持续集成服务器采用Jenki...

我国数据安全隐患重重 数据库技术建设迫在眉睫

来源:经济参考报  作者:刘睿民      大数据是新的石油,是21世纪最珍贵的资产,它正在深刻改变各国综合国力,重塑未来国际战略格局。2013年7月,习总书记在视察中国科学院时指出:“大数据是工业社...

应用程序和数据库连接

做的作品里有关于数据库方面的内容,一开始想随便看看书,凑合一下,做出来,可是总是有不尽人意的地方,最终还是决定看看数据库,用了差不多一天的时间,看了5集数据库视频,根据个人的理解对数据库做了一下的总结...

open_basedir后可能存在的安全隐患

open_basedir后可能存在的安全隐患

八步消除WordPress安全隐患

保整整

IT安全隐患排查系统

  • 2016-10-24 11:14
  • 1.15MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)