Ниже приведен пример, который показывает один из вариантов защитить строку подключения в своем конфигурационном файле. При этом необходимо воспользоваться Data Protection API (DAPI). DAPI является частью операционной системы который включен начиная с Windows 2000.
public string GetApplicationPath()
{
string constring="";
try
{
Configuration config = ConfigurationManager.OpenExeConfiguration(
System.Reflection.Assembly.GetExecutingAssembly().Location);
ConnectionStringsSection section =
config.GetSection("connectionStrings") as ConnectionStringsSection;
if (!section.SectionInformation.IsProtected)
{
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
}
constring = Properties.Settings.Default.connection;
// получаем строку подключения из зашифрованной секции
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
return constring;
}
ПРЕДУПРЕЖДЕНИЕ
Процедуру шифрования данных необходимо вызывать на компьютере конечного пользователя поскольку данные хранящиеся в секции могут быть расшифрованы только на том компьютере, на котором были зашифрованы.
При установке приложения мы помещаем в папку с программой ещё не зашифрованный config файл. Рекомендуется так же вызывать процедуру шифрования во время установки приложения.
Допустим, нам необходимо зашифровать данные, хранящиеся в секции connectionStrings. Для этого мы воспользуемся классом DataProtectionConfigurationProvider, также надо добавить новую запись в секцию с именем connection. Следующим шагом подключим к нашему проекту сборку System.Configuration.dll и в коде добавим пространства имен System.Configuration для работы со секциями.
Добавим метод который возвращает строку которую в дальнейшем можно использовать для подключения к базе или использовать для своих целей смотря как поставлена задача.
{
string constring="";
try
{
Configuration config = ConfigurationManager.OpenExeConfiguration(
System.Reflection.Assembly.GetExecutingAssembly().Location);
ConnectionStringsSection section =
config.GetSection("connectionStrings") as ConnectionStringsSection;
if (!section.SectionInformation.IsProtected)
{
// выполняем шифрование секции
section.SectionInformation.ProtectSection("DataProtectionConfigurationProvider");
config.Save();
}
constring = Properties.Settings.Default.connection;
// получаем строку подключения из зашифрованной секции
}
catch (Exception ex)
{
MessageBox.Show(ex.Message.ToString());
}
return constring;
}
При первом обращении к методу секция шифруется и сохраняется в шифрованном виде, после программа будет работать уже с защищенной секцией. В этом можно убедиться если открыть config файл перед обращением и после.
ПРЕДУПРЕЖДЕНИЕ
Процедуру шифрования данных необходимо вызывать на компьютере конечного пользователя поскольку данные хранящиеся в секции могут быть расшифрованы только на том компьютере, на котором были зашифрованы.
При установке приложения мы помещаем в папку с программой ещё не зашифрованный config файл. Рекомендуется так же вызывать процедуру шифрования во время установки приложения.
Спасибо большое за статью, очень помогла!
ОтветитьУдалить