Java безопасно хранить личные данные в распределенном приложении

Допустим, я пишу Java-приложение, которое подключается к базе данных для аутентификации пользователя перед тем, как разрешить запуск приложения. Мне нужно хранить URL базы данных, имя пользователя, пароль и имя базы данных. Очевидно, что любой может декомпилировать приложение и увидеть информацию и использовать ее против меня. Даже запутывание не сработает. Как можно безопасно закодировать личную информацию в Java-программу?

ПРИМЕЧАНИЕ: это гипотетически, поэтому, пожалуйста, не говорите мне ничего конкретного о хранении информации базы данных.

3 ответа

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

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

Как насчет использования открытого ключа для шифрования данных для входа и сохранения их в вашей Java-программе A, которой делятся другие люди. A передает зашифрованные данные в программу B (B хранится в секрете на защищенном сервере); B использует ваш личный ключ для расшифровки программы информации и аутентификации A для подключения к БД.

Я думаю, что хороший способ - это разделить представление приложения и логику. Приложение представляет только данные, которые извлекаются с использованием общедоступных функций, таких как веб-службы или API, или любой другой логики, которую вы хотите, которая следует Façade_pattern (фасад службы или фасад сеанса).

Это можно легко получить, используя, например, RMI или EJB. В логической части вы подключаетесь к базе данных /xml на диске / вашем телефоне / что угодно, но это будет сделано на машине, которая недоступна извне, если не для удаленных вызовов.

Между вашим клиентом (презентация, которая может быть java-программой, веб-сайтом, приложением для телефона) и логикой (которая находится на вашем сервере) может быть межсетевой экран или какая-либо защита, которую вы хотите. Кстати, на стороне сервера вы можете зашифровать данные в вашем EJB(который обращается к базе данных), но это не будет отображаться извне.

Я имею в виду, что это хорошая часть незнания того, как все реализовано, клиент не знает, что делают удаленные методы, он просто возвращает данные и все.

Я думаю, что если немного расширить эту концепцию, это может сработать, это просто грубая идея.

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