Как я могу скрыть свой пароль в строке подключения C #? - PullRequest
13 голосов
/ 28 сентября 2011

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

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

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

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

Ответы [ 5 ]

14 голосов
/ 28 сентября 2011

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

  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) ?

6 голосов
/ 28 сентября 2011

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

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

3 голосов
/ 28 сентября 2011

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

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

1 голос
/ 28 сентября 2011

Предлагаю 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");
  }
1 голос
/ 28 сентября 2011

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

...