Как скрыть пароль в строке подключения C#?

У меня есть следующая строка подключения:

Data Source=Paul-HPMYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password

(веб-сервис .net) Это, очевидно, можно просмотреть, просто открыв приложение.файл config и просмотр параметров конфигурации.

Мне нужен способ сделать хакера неспособным увидеть пароль. Но в то же время оставьте его настраиваемым, чтобы его можно было изменить при развертывании в другой базе данных.

5 ответов


у вас есть несколько вариантов, которые мне известны (в порядке предпочтения):

  1. используйте встроенную безопасность (SSPI), где вам не нужно включать пароль в конфигурационный файл
  2. зашифровать строку подключения (см. Шифрование Сведений О Конфигурации С Помощью Функции Защищенной Конфигурации)
  3. сохраните имя пользователя и пароль отдельно и используйте форматирование строк для создания полного соединения строке

например, строка подключения может выглядеть следующим образом:

Data Source=Paul-HP\MYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID={0};Password={1}

Я бы пошел на Вариант 1, если это невозможно, то вариант 2. Я упомянул вариант 3 Для полноты.

вы читали защита информации о соединении (ADO.NET)?


прежде всего, не используйте учетную запись "SA". Он оставляет вашу базу данных широко открытой, если кто-то получает пароль. Используйте пользовательскую учетную запись, которой разрешено выполнять операции CRUD только в определенной базе данных.

единственный способ получить web.config взломать ваш сервер. И если они это сделали, тебе все равно конец.


вероятно, проще всего зашифровать строки подключения в интернете.config или app.config

посмотреть как: шифровать разделы конфигурации в ASP.NET 2.0 использование DPAPI


вы можете зашифровать строку подключения-затем, когда вы получите доступ к строке подключения, расшифруйте ее. Это не доказательство дурака, хотя, как вы тогда застряли с проблемой, где хранить ключ для расшифровки строки подключения!


Я предлагаю en / расшифровать строку соединения. Поэтому строка подключения должна быть установлена вручную.

для шифрования взгляните на: http://dotnet-snippets.de/dns/encrypt-and-decrypt-strings-SID205.aspx

для пользовательских настроек взгляните на: http://msdn.microsoft.com/en-us/library/8eyb2ct1.aspx

замените зашифрованное на правильное во время выполнения:

  public static void SetAppSettingValue(string Key, string Value)
   {

   System.Configuration.Configuration config == ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);
// Add an Application Setting.

 config.AppSettings.Settings[Key].Value = Value;

  // Save the changes in App.config file.

   config.Save(ConfigurationSaveMode.Modified);

    ConfigurationManager.RefreshSection("appSettings");
  }