将帐户登录+ HWID锁定添加到Java程序的最安全方法是什么?

问题描述 投票:0回答:2

所以我有一个Java程序,目前只在Windows控制台上运行。当程序第一次启动时,我希望它通过用户名和密码进行登录提示。我之前使用MySQL数据库检查是否存在用户名+密码组合,然后允许该用户登录。我知道如何加密密码等,当我将它们与数据库信息进行比较时。但是,当我这样做时,MySQL登录详细信息保留在代码中,以便程序可以连接到数据库。这留下了一个巨大的问题,即有人可以反编译程序并找到这些登录详细信息,然后使用它们来访问数据库。

所以我的问题是,有没有办法使用该程序访问这些登录,而不会将我的数据库详细信息暴露给窥探者。那里有一个可以实现这个目标的图书馆吗?

java mysql
2个回答
1
投票

是的,你可以做到,但你需要重新设计你的应用程序。您应该将应用程序分成两个不同的应用程序。(简而言之:您还有很长的路要走)

1-客户端应用程序:Java应用程序与最终用户交互的位置。

2-服务器应用程序:应用程序与DataBase交互的位置。此应用程序可以通过您的网络与您的客户交谈。

注意:请记住,客户端的任何应用程序都可以反编译。甚至可以监视客户端 - 服务器之间的所有通信。

有很多方法可以在服务器和客户端之间进行通信。您可以选择自己的(Socket通信)或遵循REST或SOAP等标准。

如果您想使用REST或SOAP,那么有许多现成的框架和库可用,其中Spring就是其中之一。由于您需要具有服务器应用程序(例如:Rest服务器),因此您需要在容器中运行服务器应用程序,在这种情况下,Tomcat是JAVA世界中最着名的一个。

但是有更好的开始方式;你可以为你的服务器应用程序制作一个Spring Boot应用程序。大多数库甚至您的容器都已嵌入,您只需要专注于您的应用程序逻辑。一旦完成,您只需运行一个jar文件,您的客户端就可以通过网络开始与服务器应用程序通信。缺点是您需要遵循弹簧启动标准。

您还可以通过Spring Security framework保护您的Rest API(这是完全独立的主题),但您可以将其简化为每个REST调用的服务器 - 客户端之间的令牌交换。

所以在这种情况下,假设有人反编译你的客户端应用程序,他会 什么都看不到,有些是API链接,没有登录和令牌就无法工作。

同时保持在中间你还需要保护服务器和客户端之间的通信通过TLS扔网络。(这是完全独立的主题)


0
投票

如果您提供数据库访问权限,则处理该选择的副作用。我认为mysql提供某种行级安全选项。检查文档。

如果您需要某种级别的后端混淆,请通过REST或其他方案将其放在您的用户和后端之间。

© www.soinside.com 2019 - 2024. All rights reserved.