Run*_*CMD 5 .net c# sql-server security
我们要保护用于从.NET Windows应用程序连接到我们的SQL Server数据库的登录信息。
此信息作为连接字符串存储app.config在客户端PC上的文件中。
建议您几乎在所有地方都使用加密连接字符串
(ConnectionStringsSection)config.GetSection("connectionStrings").ProtectSection();
Run Code Online (Sandbox Code Playgroud)
但是,想要您的数据库密码的恶意用户可以只复制加密的配置文件,将其与自己的应用程序一起使用,然后调用
(ConnectionStringsSection)config.GetSection("connectionStrings").UnprotectSection();
Run Code Online (Sandbox Code Playgroud)
这会将连接字符串解密回纯文本。
有什么方法可以真正保护存储在用户PC上的.NET应用程序中的数据库密码?
编辑:为进一步澄清这种情况,我们的确是在谈论可以访问同一台PC并需要密码的恶意用户(阅读:竞争对手)。
作为辅助措施,我们首先自己加密密码,将其保存到app.config,然后调用ProtectSection()。这将使Unprotect()输出加密的密码。但是用户仍然可以反编译我们的代码并找出我们使用的加密密钥和算法...
想要您的数据库密码的恶意用户,只需复制加密的配置文件,并将其与自己的应用程序一起使用
除非恶意用户在同一台计算机上运行,或者可以访问“ 受保护的配置提供程序”的加密密钥,否则这将无法工作。
这是一个相当有力的保护措施,但是如果我们假设web.config可能被盗,我们还必须假设私钥文件也可能被盗。因此,受保护的选项只有在隔壁的孩子将很难打破它的意义上才是“更安全的”。
如果RDBMS是SQL Server,则可以使用其集成安全性功能来避免存储甚至创建RDBMS的登录凭据。