Java - Как хранить пароль, используемый в приложении?
Я разрабатываю приложение, которое считывает некоторые данные из db.
Соединение с db выполняется с помощью стандартного механизма входа/пароля.
Проблема заключается в следующем: как сохранить пароль db?
Если я сохраню его как член класса, его можно легко извлечь через операцию декомпиляции.
Я думаю, что обфускация не решает проблему, так как пароль строки можно легко найти и в обфускационном коде.
У кого есть предложения?
Ответы
Ответ 1
Никогда не записывайте пароли в свой код. Это было недавно поднято в Топ-25 самых опасных ошибок программирования
Жесткое кодирование секретной учетной записи и пароля в вашем программном обеспечении чрезвычайно удобно - для опытных инженеров-реверсоров. Если пароль одинаковый для всего вашего программного обеспечения, каждый клиент становится уязвимым, когда этот пароль неизбежно становится известным. И поскольку он жестко закодирован, ему больно больно исправлять.
Вы должны хранить информацию о конфигурации, включая пароли, в отдельном файле, который приложение считывает при запуске. Это единственный реальный способ предотвратить утечку пароля в результате декомпиляции (никогда не компилируйте его в двоичный файл).
Смотрите этот замечательный ответ для более подробного объяснения: Уильям Брендель
Ответ 2
Для небольшого и простого приложения, в котором вы не хотите использовать множество других мер безопасности, вероятно, это вариант конфигурации. При развертывании приложения он может читать файл конфигурации, в котором указаны свойства подключения к базе данных. Это означает, что приложение само по себе не знает пароль, но вам нужно получить доступ к серверу, чтобы найти пароль.
Ответ 3
Некоторые данные должны быть конфигурируемы. Как только вы сказали, это могут быть username
и password
или некоторые общие datas
; Обычно мы создаем страницу конфигурации свойств. То, что я использовал, это использовать файл XML
, сохранить password/username
в некотором encrypted
формате. Вы можете легко проанализировать XML
, чтобы получить свой пароль для подключения.
Это гарантирует надежность того, что ваши пароли могут быть изменены в любое время. Это относится не только к паролям. но любые данные, которые вы используете, которые должны быть настроены время от времени.