【发布时间】:2019-12-05 06:41:51
【问题描述】:
我有一个旧应用程序,它使用 SQL Server 身份验证连接字符串连接到本地或基于 Intranet 的 SQL Server 实例。它目前使用 System.Configuration.ConfigurationManager 从 app.config 文件中获取连接字符串。但是,一旦从 app.config 文件中读取该连接字符串,它的值就会被加载到内存中,并且可以使用 Process Hacker 等工具公开以查看应用程序内存。我目前有一个带有方法的模块,该方法返回存储在 SecureString 对象中的连接字符串的值。连接字符串值在创建 ConnectionStringSection 对象时加载到内存中。 app.config 连接字符串 xml 通过 microsoft 文档中给出的说明进行加密
我了解使用集成安全性是最佳实践,在这种情况下,我们的连接必须使用 SQL Server 身份验证。有没有办法消除或最小化连接字符串在应用程序内存中的暴露?
Public Function GetConnectionString() As SecureString
Dim fileMap As ExeConfigurationFileMap = New ExeConfigurationFileMap
fileMap.ExeConfigFilename = Environment.CurrentDirectory + "\app.config"
Dim config As Configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None)
Dim section As ConnectionStringsSection = TryCast(config.GetSection("connectionStrings"), ConnectionStringsSection)
Dim secureString As New SecureString
For Each character As Char In section.ConnectionStrings("ConString").ConnectionString.ToCharArray
secureString.AppendChar(character)
Next
Return secureString
End Function
【问题讨论】:
-
您使用哪个工具进行内存分析?
-
查看连接字符串中的
Persist Security Info键。不确定,但它可能会对您有所帮助。 -
@dotnetstep processhacker.sourceforge.io 运行它,找到你的进程 -> 属性 -> 内存选项卡 -> 字符串按钮和创建 ConnectionStringsSection 对象后存储在程序内存中的连接字符串数据。跨度>
标签: .net vb.net connection-string password-protection configurationmanager