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

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

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

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

Ответы [ 6 ]

17 голосов
/ 04 сентября 2008

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

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

5 голосов
/ 04 сентября 2008

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

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

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

1 голос
/ 04 сентября 2008

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

1 голос
/ 04 сентября 2008

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

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

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

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

1 голос
/ 04 сентября 2008

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

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

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

0 голосов
/ 23 декабря 2013
  1. Создать пользователя O / S
  2. Поместите пароль в переменную среды O / S для этого пользователя
  3. Запустите программу от имени этого пользователя

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

  1. Только пользователь root или тот пользователь может просматривать переменные среды этого пользователя
  2. Выживает перезагрузка
  3. Вы никогда не случайно регистрируете пароль в системе контроля версий
  4. Вам не нужно беспокоиться о нарушении прав доступа к файлу
  5. Вам не нужно беспокоиться о том, где вы храните ключ шифрования
  6. Работает x-платформа
...