Где хранить учетные данные в веб-приложении?

Мне интересно, какие методы вы используете для хранения учетных данных базы данных для своего приложения. Я специально интересуюсь java webapps, но я не думаю, что есть необходимость ограничивать вопросы.

вещи, которые следует учитывать:
Используете ли вы файлы свойств, xml configs, другие?
Связано ли это с вашим приложением (то есть в файле jar) или хранится отдельно в файловой системе где-нибудь?
Зашифрован ли пароль? Если да, то какую схему шифрования вы используете?

Ответы

Ответ 1

Поскольку вы оставляете вопрос открытым для платформы, я добавлю, что учетные данные базы данных для приложений .NET хранятся в файле web.config. Начиная с версии 2.0 и выше, существует специальный раздел ConnectionStrings, который позволяет упростить программный доступ к строке подключения.

В дополнение к тому, что IIS автоматически блокирует прямые запросы к файлу web.config по умолчанию, вы также можете использовать команду IIS для шифрования раздела ConnectionString файла web.config. Это шифрование является специфичным для машины, что повышает его сильные стороны, а среда выполнения .NET также расшифровывает строку соединения "на лету" при ее доступе, поэтому нет необходимости в дополнительном кодировании в приложении для работы с ней.

Ответ 2

С Java, пулы подключения к базам данных должны быть переданы в webapps контейнером. Это стандартно декларируется в WEB-INF/web.xml в качестве ресурсов. То же самое относится к почтовым сеансам и другим внешним ресурсам, которые могут отличаться от установки к установке. Посмотрите JNDI для получения дополнительной информации об этом)

Приятная часть этого заключается в том, что приложение не заботится о том, как фактически подключиться к чему-либо снаружи. Он не увидит никаких паролей, потому что сам контейнер будет их использовать.

В tomcat это настроено либо из файлов контекста (например,) в conf/Catalina/localhost/, conf/server.xml, либо, предпочтительно, только для сред dev, из webapps META-INF/context.xml. Другие среды имеют свое собственное местоположение конфигурации или приложение.

Шифрование паролей фактически зависит от контейнера. Tomcat хранит их в открытом виде, но само приложение не увидит его. Я не знаю о механике в других средах.

Ответ 3

В стеке Microsoft все может быть очень приятным.

Вы создаете учетную запись сетевого пользователя в Active Directory без каких-либо разрешений. Вы настраиваете IIS для запуска вашего webapp в качестве этого пользователя. Вы предоставляете пользователю доступ к доступу к веб-папкам и файлам на диске. Вы настраиваете SQL Server, чтобы предоставить пользователям права на чтение/запись для таблиц, которые вы хотите. И в строке подключения вы укажете, что клиент db будет подключаться как учетная запись пользователя, в которой в настоящее время выполняется webapp.

Существует только одна фактическая учетная запись пользователя, хотя она видна в нескольких местах. У этой учетной записи очень ограниченные разрешения. Хранилище паролей отсутствует, даже если оно зашифровано. Конфигурация, которая должна быть выполнена в коде для работы, не требуется (все это при настройке разрешений).

Ответ 4

Зависит от сервера приложений.

Обычно я использую JNDI-запросы для источника данных, поэтому учетные данные хранятся на сервере приложений, который обрабатывает пул соединений. Не нужно помещать в конфигурацию ничего, кроме имени JNDI.

Да, пароль зашифрован в WebLogic.

В Tomcat все может быть очень рискованным. Информация о подключении находится в файле META-INF/context.xml, что означает простой текст для пароля. Я делаю это только для развития, никогда в производстве.

Ответ 5

В Django учетные данные находятся в файле конфигурации settings.py. Поскольку это обычно не содержится в дереве каталогов /var/www/, это очень безопасно.

Кроме того, одно приложение Django может использоваться (и повторно использоваться) для многих веб-сайтов или веб-серверов на одном и том же хосте, каждый из которых имеет свои собственные настройки. Таким образом, конфигурация settings.py не входит в комплект приложения, но является частью одного развертывания приложения.

Ответ 6

Для asp.net:

Я храню глобальные параметры, такие как строки подключения и пути репозитория в реестре, а затем ссылку на запись реестра в файле web.config.

Основная причина в том, что я часто нахожу, что мне приходится писать автономный исполняемый файл для запуска фоновых задач и других автоматизированных функций, требующих доступа к тем же параметрам. Поэтому сохранение всего, что по-настоящему глобально в одном легкодоступном месте, облегчает жизнь.

Ответ 7

Какое из них является хорошим местом для хранения учетных данных базы данных веб-приложений? В отдельном файле в исходном коде  В отдельном файле на вашем веб-сервере  В вашей базе данных  Никто. Учетные данные базы данных никогда не должны храниться