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

时间:2019-04-01 18:18:44

标签: java mysql

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

所以我的问题是,有没有一种方法可以使用该程序访问这些登录名,而又不会将我的数据库详细信息暴露给窥探者。那里有图书馆可以做到这一点吗?

2 个答案:

答案 0 :(得分:1)

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

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

2-服务器应用程序:应用程序与数据库交互的位置。该应用程序可以通过您的网络与您的客户对话。

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

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

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

但是有更好的开始方式;您可以为服务器应用程序制作一个 Spring Boot 应用程序。大多数库,甚至您的容器都已被嵌入,您只需要关注Application Logic。完成后,您只需要运行一个jar文件,您的客户端就可以开始通过网络与服务器应用程序对话。缺点是您需要遵循spring boot标准。

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

因此在这种情况下,假设有人反编译您的客户端应用程序,他会
除了其余的API链接,什么都看不到。没有登录名和令牌,这些链接就无法工作。

还请注意,您还需要通过 TLS 保护服务器与客户端之间的通信安全。(这是完全独立的主题)

答案 1 :(得分:0)

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

如果您想要某种程度的后端混淆,则可以通过REST或其他方案将其置于用户和后端之间。

相关问题