Как скрыть пароль в строке подключения C#?
У меня есть следующая строка подключения:
Data Source=Paul-HPMYDB;Initial Catalog=MyMSDBSQL;Persist Security Info=True;User ID=sa;Password=password
(веб-сервис .net) Это, очевидно, можно просмотреть, просто открыв приложение.файл config и просмотр параметров конфигурации.
Мне нужен способ сделать хакера неспособным увидеть пароль. Но в то же время оставьте его настраиваемым, чтобы его можно было изменить при развертывании в другой базе данных.
5 ответов
у вас есть несколько вариантов, которые мне известны (в порядке предпочтения):
- используйте встроенную безопасность (SSPI), где вам не нужно включать пароль в конфигурационный файл
- зашифровать строку подключения (см. Шифрование Сведений О Конфигурации С Помощью Функции Защищенной Конфигурации)
- сохраните имя пользователя и пароль отдельно и используйте форматирование строк для создания полного соединения строке
например, строка подключения может выглядеть следующим образом:
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");
}