mysql密码反编译_如何保护MySQL用户名和密码不被反编译?
mysql密码反编译_如何保护MySQL⽤户名和密码不被反编
译?
⼩编典典
将机密帐户和密码硬编码到软件中⾮常⽅便-对于熟练的反向⼯程师。如果所有软件上的密码都相同,那么当不可避免地知道该密码时,每个客户都会受到攻击。⽽且由于它是硬编码的,因此修复起来⾮常痛苦。
你应将配置信息(包括密码)存储在应⽤程序启动时读取的单独⽂件中。这是防⽌密码因反编译⽽泄漏的唯⼀真实⽅法(切勿⾸先将其编译为⼆进制⽂件)。鸳鸯组词组两个词
有关此常见错误的更多信息,你可以阅读CWE-259⽂章。本⽂包含更全⾯的定义,⽰例以及有关此问题的许多其他信息。
在Java中,最简单的⽅法之⼀是使⽤Preferences类。它旨在存储各种程序设置,其中⼀些可能包含⽤户名和密码。
import java.util.prefs.Preferences;
public class DemoApplication {
Preferences preferences =
Preferences.userNodeForPackage(DemoApplication.class);
public void setCredentials(String username, String password) {
preferences.put("db_username", username);
preferences.put("db_password", password);
}
public String getUsername() {
("db_username", null);
}
public String getPassword() {
("db_password", null);
}
// your code here
}
在上⾯的代码中,可以setCredentials在显⽰询问⽤户名和密码的对话框后调⽤该⽅法。当你需要连接到数据库时,只需使⽤getUsername和getPassword⽅法即可检索存储的值。登录凭据不会被硬编码到你的⼆进制⽂件中,因此反编译不会带来安全风险。
重要说明:⾸选项⽂件只是纯⽂本XML⽂件。确保你采取适当的步骤来防⽌未经授权的⽤户查看原始⽂件(UNIX权限,Windows权限等)。⾄少在Linux中,这不是问题,因为调⽤Preferences.userNodeForPackage将在当前⽤户的主⽬录中创建XML⽂件,⽆论如何其他⽤户都不可读。在Windows中,情况可能有所不同。
更重要的注意事项:在此答案的注释以及其他内容的讨论中,有很多讨论都针对这种情况使⽤了正确的体系结构。最初的问题并未真正提及使⽤该应⽤程序的上下⽂,因此我将讨论我能想到的两种情况。第⼀种情况是使⽤该程序的⼈已经知道(并被授权知道)数据库凭据。第⼆种情况是你(开发⼈员)试
不错的小说图对使⽤该程序的⼈员保密数据库凭据。
水滴石穿对什么第⼀种情况:⽤户被授权知道数据库登录凭据
在这种情况下,我上⾯提到的解决⽅案将起作⽤。Java Preference类将以纯⽂本形式存储⽤户名和密码,但是⾸选项⽂件仅可由授权⽤户读取。⽤户可以简单地打开⾸选项XML⽂件并读取登录凭证,但这不会带来安全风险,因为⽤户知道其开头就是凭证。
第⼆种情况:尝试向⽤户隐藏登录凭据
万圣节是什么意思?这是更复杂的情况:⽤户不应该知道登录凭据,但仍然需要访问数据库。在这种情况下,运⾏应⽤程序的⽤户可以直接访问数据库,这意味着程序需要提前知道登录凭据。我上⾯提到的解决⽅案不适⽤于这种情况。你可以将数据库登录凭据存储在⾸选项⽂件中,但是该⽤户将是所有者,因此该⽤户将能够读取该⽂件。实际上,实际上没有很好的⽅法可以安全地使⽤此案例。
正确的情况:使⽤多层体系结构
正确的⽅法是在数据库服务器和客户端应⽤程序之间具有中间层,该中间层对单个⽤户进⾏⾝份验证并允许执⾏⼀组有限的操作。每个⽤户都有⾃⼰的登录凭据,但没有数据库服务器的登录凭据。凭据将允许访问中间层(业务逻辑层),并且每个⽤户都不同。
每个⽤户都有⾃⼰的⽤户名和密码,可以将它们存储在本地的⾸选项⽂件中,⽽不会带来任何安全风险。这称为三层体系结构(这些层是数据库服务器,业务逻辑服务器和客户端应⽤程序)。它⽐较复杂,但这实际上是执⾏这种操作的最安全的⽅法。
操作的基本顺序是:
客户端使⽤⽤户的个⼈⽤户名/密码通过业务逻辑层进⾏⾝份验证。⽤户名和密码对⽤户⽽⾔是已知的,并且与数据库登录凭据⽆关。
如果⾝份验证成功,则客户端向业务逻辑层发出请求,以从数据库中请求某些信息。例如,产品库存。请注意,客户端的请求不是SQL查询。这是⼀个远程过程调⽤,例如getInventoryList。玉怎么分好坏
业务逻辑层连接到数据库并检索请求的信息。业务逻辑层负责根据⽤户的请求形成安全的SQL查询。应该对SQL查询的所有参数进⾏清理,以防⽌SQL注⼊攻击。
业务逻辑层将清单列表发送回客户端应⽤程序。
客户端向⽤户显⽰库存清单。
请注意,在整个过程中,客户端应⽤程序永远不会直接连接到数据库。业务逻辑层接收来⾃经过⾝份验证的⽤户的请求,处理客户的清单清单请求,然后才执⾏SQL查询。
2020-03-18

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。