#java #mysql
#java #mysql
Вопрос:
Итак, у меня есть Java-программа, которая в данный момент запускается только в консоли Windows. При первом запуске программы я хочу, чтобы она выполняла запрос на вход с именем пользователя и паролем. Ранее я использовал базу данных MySQL, чтобы проверить, существует ли комбинация имя пользователя пароль, а затем разрешить этому пользователю войти в систему. Я знаю, как шифровать пароли и тому подобное, когда сравниваю их с информацией базы данных. Однако, когда я это делал, данные для входа в MySQL были оставлены в коде, чтобы программа могла подключиться к базе данных. Это создает огромную проблему в том, что кто-то может декомпилировать программу и найти эти данные для входа, а затем использовать их для доступа к базе данных.
Итак, мой вопрос в том, есть ли способ получить доступ к этим логинам с помощью программы, НЕ раскрывая детали моей базы данных шпионящему лицу. Существует ли библиотека, которая могла бы выполнить это?
Ответ №1:
Да, вы можете это сделать, но вам нужно перепроектировать ваше приложение. Вы должны разделить свое приложение на два разных приложения.(Короче говоря: вам предстоит пройти долгий путь)
1- Клиентское приложение: где ваше Java-приложение взаимодействует с конечным пользователем.
2-серверное приложение: где ваше приложение взаимодействует с вашей базой данных. Это приложение может взаимодействовать с вашим клиентом через вашу сеть.
Примечание: имейте в виду, что любое приложение на клиенте может быть декомпилировано. Можно отслеживать весь трафик, даже любую связь между клиент-сервером.
Существует множество методов для обеспечения связи между сервером и клиентами. Выбор за вами, вы можете создать свой собственный (связь через сокет) или следовать некоторым стандартам, таким как REST или SOAP.
Если вы хотите использовать REST или SOAP, существует множество готовых фреймворков и библиотек, одной из которых является Spring. Поскольку вам необходимо иметь серверное приложение (например, Rest Server), вам нужно запускать ваше серверное приложение в контейнере, где в данном случае Tomcat является самым известным в мире JAVA.
Но есть лучший способ начать; вы можете создать приложение для весенней загрузки для вашего серверного приложения. Большинство библиотек, даже ваш контейнер, уже встроены, и вам нужно только сосредоточиться на логике вашего приложения. Как только это будет сделано, вам просто нужно запустить один файл jar, и ваш клиент сможет начать общение с серверным приложением по сети. Недостатком является то, что вам нужно следовать стандарту spring boot.
Вы также можете защитить свой Rest API с помощью Spring Security framework (это совершенно отдельная тема), но вы можете упростить его до обмена токенами между вашим сервером-клиентом для каждого вызова REST.
Итак, в этом сценарии, допустим, кто-то декомпилирует ваше клиентское приложение, он
не увидит ничего, кроме некоторых ссылок rest API, которые не могут работать без логина и токена.
Также имейте в виду, что вам также необходимо обеспечить связь между сервером и клиентом по сети с помощью TLS.(Это совершенно отдельная тема)
Ответ №2:
Если вы предоставляете доступ к БД, то разберитесь с побочными эффектами этого выбора. Я думаю, что mysql предлагает какой-то вариант безопасности на уровне строк. Проверьте документы.
Если вам нужен некоторый уровень запутывания бэкэнда, поместите его между вашими пользователями и бэкэндом через REST или какую-либо другую схему.
Комментарии:
1. Я предполагаю, что REST был бы лучшим способом в этой ситуации?
2. Мы пишем наш лучший код, когда придерживаемся наиболее знакомых нам соглашений.