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

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
26
0
3 677
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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