Что лучший способ состоит в том, чтобы сохранить пароли настраивающимися, не имея их слишком легко доступный случайному читателю?

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

40
задан Robert Harvey 20 November 2012 в 19:46
поделиться

10 ответов

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

Помнят, что Вы не должны использовать ту же защиту для каждого различного клиента. Некоторые steps:-

  1. Создает различные счета базы данных на различные системы, которые получают доступ к Вашей базе данных
  2. Предельный доступ на базе данных к только, что им нужно использование Вашей встроенной базы данных GRANT
  3. Хранилище тройной DES (или безотносительно) ключ в классе менеджера паролей на Вашей базе данных. Используйте это для дешифрования зашифрованного значения в файле свойств.

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

17
ответ дан WW. 27 November 2019 в 01:56
поделиться

Давайте примем следующий общий сценарий:

  • Вы используете ту же кодовую базу для всех сред, и Ваша кодовая база имеет пароли базы данных для каждой среды.

  • персоналу (системные администраторы, менеджеры конфигурации), которые имеют доступ к Вашему серверу производственного приложения, разрешают знать производственные пароли базы данных и никого больше.

  • Вы не хотите, чтобы любой с доступом к исходному коду знал, каковы производственные пароли.

В сценарии как это, можно зашифровать и сохранить производственные пароли в файлах свойств что приложение. В рамках приложения можно включать класс, который читает пароли из файла свойств и дешифрует его прежде, чем передать его драйверу базы данных. Однако ключ и алгоритм, используемый для дешифрования пароля, не являются частью исходного кода, а скорее передали приложению как системное свойство во времени выполнения. Это разъединяет знание ключа из исходного кода приложения, и любой с доступом только к исходному коду приложения больше не будет в состоянии дешифровать пароль, потому что у них нет доступа к среде выполнения приложения (сервер приложений).

, Если Вы используете Java, смотрят на это для более конкретного примера. Пример использует Spring и Jasypt. Я уверен, что некоторая вещь как это может экстраполироваться к другим средам как.Net

10
ответ дан neesh 27 November 2019 в 01:56
поделиться

На моем старом рабочем месте мы раньше имели систему, посредством чего все пароли были зашифрованы (использующий Тройной DES или независимо от того, что мы использовали в то время). Пароли часто хранились в файлах свойств (это было в системе Java).

, Когда пароль должен был быть изменен, мы могли просто использовать"! простой текст" как значение, и затем наш код загрузил бы его, зашифровал бы его и сохранил бы зашифрованное значение назад в файле свойств.

Это означало, что было возможно изменить пароль, не зная то, что исходное значение было - не уверено, если это - вид вещи, Вы просили!

4
ответ дан 27 November 2019 в 01:56
поделиться

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

Если так, вот то, что можно сделать:

1) Изменение любые клиентские приложения, которые соединяются непосредственно с DB для прохождения через сервиса. (Если они имеют для соединения непосредственно, затем, по крайней мере, дайте им первый шаг для "получения пароля" от сервиса, тогда они могут соединиться непосредственно).

2) Хранилище пароли в web.config файле (если Вы приняли решение сделать.Net веб-сервисы), и затем шифруют раздел "строк подключения" файла.

3
ответ дан Timothy Khouri 27 November 2019 в 01:56
поделиться

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

2
ответ дан paan 27 November 2019 в 01:56
поделиться

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

0
ответ дан tunaranch 27 November 2019 в 01:56
поделиться

Аутентификация NTLM или основанный на LDAP (Active Directory) аутентификация должна быть доступна Вам с небольшим количеством усилия. Это позволило бы Вам использовать свою "аутентификацию Windows" через приложения.

Это может означать определенную миграцию для Вашего операционного штата, но SSO для ряда приложений хорош.

0
ответ дан Ken Gentle 27 November 2019 в 01:56
поделиться

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

страница Bruce Schneier на Шифр

статья Wikipedia о Шифр

0
ответ дан Bork Blatt 27 November 2019 в 01:56
поделиться

Использование шифрования - не лучшая идея. Если кто-то скомпрометирует ключ, он сможет его расшифровать. Используйте хеш-алгоритм с солью для хранения паролей. Алгоритмы хеширования - это односторонний способ, поэтому он необратим. Но они уязвимы для атак по словарю, поэтому используйте соль (объединение простого текста с чем-то длинным и подробным, чем хеширование). Он также защищает базу данных от внутренних атак.

-2
ответ дан 27 November 2019 в 01:56
поделиться

Да, я должен согласиться с возможностью хранения (солёных) хэшей. Я бы порекомендовал (соленый) SHA256-хеш пароля, хранящегося в базе данных. Также не забудьте обеспечить соблюдение правил безопасного пароля.

0
ответ дан 27 November 2019 в 01:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: