在app.config文件中放置带密码的连接字符串真是件好事吗?
在我看来,app.config没有以任何方式加密,并且可以轻松读取密码信息。
我有一个应用程序访问数据库,而目标最终用户没有进行身份验证。使用组用户/密码。仅当当前Windows用户位于Active Directory组中时,才会启动该应用程序。因此,一旦进入应用程序,用户就可以使用组用户连接到数据库。
处理此类连接字符串的正确方法是什么?在源代码中隐藏它们吗?
注意这适用于独立应用 - 而不是ASP,IIS等
这对我有用
(感谢Jon Galloway - http://weblogs.asp.net/jgalloway/archive/2008/04/13/encrypting-passwords-in-a-net-app-config-file.aspx)
private void EncryptConfigSection()
{
Configuration config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
ConfigurationSection section = config.AppSettings;
if (section != null)
{
if (!section.SectionInformation.IsProtected)
{
if (!section.ElementInformation.IsLocked)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
section.SectionInformation.ForceSave = true;
config.Save(ConfigurationSaveMode.Full);
}
}
}
}
这可以通过在应用程序第一次运行时加密exe配置文件来实现。我没有找到一种方法在安装过程中执行此操作,因此配置文件完全可读,直到第一次启动应用程序。也许有人有想法......
答案 0 :(得分:6)
您可以加密app.config或web.config文件的各个部分,有关详细信息,请参阅for example this post。
具体来说,this MSDN article介绍了保护连接字符串的各种方法。
答案 1 :(得分:2)
您应该使用集成身份验证,并在SQL上对AppPool用户进行身份验证,以及他需要执行的操作。
使用它,您不需要在配置中提供密码,并且连接使用app pool用户对sql server进行身份验证。
因此,您拥有最高的安全性。答案 2 :(得分:0)
此外,您运行的是哪个版本的IIS?这是共享主机吗?或者您是否具有IIS的管理员权限?如果是这样,请在IIS管理器中查看IIS ASP.NET设置。您可以指定ConnectionStrings。