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

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

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

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

3.09.2008 23:30:48
6 ОТВЕТОВ
РЕШЕНИЕ

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

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

17
3.09.2008 23:32:35
Предоставленная ссылка перенаправлена ​​на oreilly.com !!
Mahendran Sakkarai 3.12.2019 06:51:59

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

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

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

1
3.09.2008 23:34:06

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

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

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

5
3.09.2008 23:34:10

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

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

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

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

1
3.09.2008 23:47:12

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

1
3.09.2008 23:59:34
  1. Создать пользователя O / S
  2. Поместите пароль в переменную окружения O / S для этого пользователя
  3. Запустите программу от имени этого пользователя

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

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