Шифрование строки подключения. Data Protection API
Один из вариантов защитить строку подключения в своем конфигурационном файле - это воспользоваться Data Protection API (DAPI). Начиная с Windows 2000, DAPI является частью операционной системы.
Допустим, нам необходимо зашифровать данные, хранящиеся в секции connectionStrings. Для этого мы воспользуемся классом DataProtectionConfigurationProvider:
Подключим к нашему проекту сборку System.Configuration.dll и используем следующий код:
public void DataProtectionAPITest() { try
{ //открываем секцию connectionStrings из App.config 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(); }
} catch (Exception ex) { Console.WriteLine(ex.Message); }
// получаем строку подключения из зашифрованной секции
Console.WriteLine(Properties.Settings.Default.ConnectionString); }
ПРЕДУПРЕЖДЕНИЕ.Данные, хранящиеся в секции, могут быть расшифрованы только на том компьютере, на котором были зашифрованы. Таким образом, процедуру шифрования данных необходимо вызывать на компьютере конечного пользователя. |
Данный пример как раз подходит для этих целей. При установке приложения мы помещаем в папку с программой ещё не зашифрованный App.Config. При первом запуске приложения данная процедура его зашифрует и, в последствии, программа будет работать уже с защищенной секцией. Можно так же вызывать процедуру шифрования во время установки приложения.
К сожалению, нет стандартных средств для защиты UDL файлов, поэтому стоит воспользоваться способом хранения защищенных строк подключения в файле конфигурации.