C#保护数据库连接信息

目前我在类文件本身中存储了我的C# mysql连接信息,这看起来并不聪明,因为最终用户可以简单地使用反射器来查看源代码,以防它没有被模糊.

我怎么能以安全的方式存储这些信息?

代码

private void Initialize()
{
    server = "xxx";
    database = "xxx";
    uid = "xxx";
    password = "xxx";
    string connectionString;
    connectionString = "SERVER=" + server + ";" + "DATABASE=" +
    database + ";" + "UID=" + uid + ";" + "PASSWORD=" + password + ";";

    connection = new MysqLConnection(connectionString);
}

解决方法

我正在回答这个问题,以解决本地应用程序的安全问题,因为这就是OP的情况,尽管其他答案将其视为Web应用程序.

如果单个数据库由具有不同安全性问题的多个用户共享,我怀疑它是,那么你真的不应该在本地,代码,配置,配置中加密等存储数据库连接字符串.客户端永远不应该有这些信息.这是真正保证客户端安全性的唯一方法.

坚定的人可以简单地对您的代码进行反向工程,并解密连接细节.此外,如果他们使用类似.NET Reflector的东西来调试代码,他们可以使用反射从连接对象中提取连接字符串,包括密码.然后,他们直接连接到您的数据库提取他们想要的任何信息是微不足道的.当然你可以有一个IP白名单,但如果其中一个用户不好,那么你仍然有同样的问题.

我的建议是您创建一个将操纵您的数据库的Web服务.最终用户使用的软件只需使用用户凭据通过Web服务对自身进行身份验证,然后使用该服务访问允许的资源.这是现代应用程序的运作方式.

如果每个用户都有自己的数据库,那么您只需存储本地加密的连接字符串,因为这足以防止大多数问题,除了可以访问用户计算机的恶意用户.

显然,正如弗拉基米尔所说,你可以把它作为一般解决方案(在配置中加密并希望最好),但如果需要任何安全性,我真的不建议这样做.例如,如果您将用户密码存储数据库中 – 即使是以散列形式存储 – 这也不是一个安全的想法.您为每个人使用此方法所带来的风险是,有人可能会盗取您的所有数据,或者擦除您的所有数据,甚至操纵数据对他们有利.

相关文章

在要实现单例模式的类当中添加如下代码:实例化的时候:frmC...
1、如果制作圆角窗体,窗体先继承DOTNETBAR的:public parti...
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是...
近期在做DSOFramer这个控件,打算自己弄一个自定义控件来封装...
今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都...
最近在研究WinWordControl这个控件,因为上级要求在系统里,...