Как мне избежать сохранения пароля базы данных в виде открытого текста в исходном коде?

StackOverflow https://stackoverflow.com/questions/42833

Вопрос

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

Connection c = DriverManager.getConnection("url", "username", "password");

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

Это было полезно?

Решение

Вы можете сохранить строку подключения в файле Web.config или App.config и зашифровать раздел, в котором она хранится.Вот очень хорошая статья, которую я использовал в предыдущем проекте для шифрования строки подключения:

http://www.ondotnet.com/pub/a/dotnet/2005/02/15/encryptingconnstring.html

Другие советы

В .NET принято хранить connectionstrings в отдельном файле конфигурации.

Исходя из этого, конфигурационный файл может быть зашифрован.

Если вы используете Microsoft SQL Server, все это становится неактуальным, если вы используете учетную запись домена для запуска приложения, которое затем использует доверенное подключение к базе данных.В этом случае строка подключения не будет содержать никаких имен пользователей и паролей.

Я могу порекомендовать эти методы .NET-программистам:

  • Зашифровать пароль \ строку подключения в конфигурационном файле
  • Настройка доверенного соединения между клиентом и сервером (т.е.используйте Windows auth и т.д.)

Вот полезные статьи из CodeProject:

Если я не упускаю момент, соединением должен управлять сервер через пул подключений, поэтому учетные данные для подключения хранятся сервером, а не приложением.

Продолжая это, я обычно придерживаюсь соглашения, по которому веб-приложение внешнего интерфейса (в DMZ) взаимодействует с БД только через веб-службу (в домене), обеспечивая, таким образом, полное разделение и повышенную безопасность БД.

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

Альтернативный подход заключается в выполнении всех операций с помощью хранимых процедур и предоставлении пользователю приложения доступа только к этим процедурам.

Предполагая, что вы используете MS SQL, вы можете воспользоваться проверкой подлинности Windows, которая не требует usserame / pass нигде в исходном коде.В противном случае мне пришлось бы согласиться с другими постерами, рекомендующими app.config + шифрование.

  1. Создайте пользователя O / S
  2. Введите пароль в переменную среды O / S для этого пользователя
  3. Запустите программу от имени этого пользователя

Преимущества:

  1. Только root или этот пользователь может просматривать переменные среды O / S этого пользователя
  2. Переживает перезагрузку
  3. Вы никогда случайно не вводите пароль в системе управления версиями
  4. Вам не нужно беспокоиться о том, что вы испортите права доступа к файлам
  5. Вам не нужно беспокоиться о том, где вы храните ключ шифрования
  6. Работает x-платформа
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top