首页 >数据库 >mysql教程 >如何保护 Java 代码中的 MySQL 凭证免遭反编译?

如何保护 Java 代码中的 MySQL 凭证免遭反编译?

Linda Hamilton
Linda Hamilton原创
2024-12-17 19:51:12216浏览

How to Secure MySQL Credentials in Java Code Against Decompilation?

如何保护 MySQL 用户名和密码不被反编译

问题:

Java .class文件可以毫不费力地反编译。如果需要在代码中使用登录凭据,如何保护数据库?

答案:

切勿将密码硬编码到代码中。最近在“25 个最危险的编程错误”中强调了这一点:

“将秘密帐户和密码硬编码到您的软件中对于熟练的逆向工程师来说非常方便。如果密码在您的软件中保持一致,当密码不可避免地被泄露时,每个客户都会变得容易受到攻击。此外,由于是硬编码的,这给解析带来了很大的不便。”

配置信息,包括密码,应存储在应用程序在初始化时读取的单独文件中。这是防止密码因反编译而泄漏的唯一真正方法(永远不要将其编译成二进制文件)。

解决方案:

对于 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() {
    return preferences.get("db_username", null);
  }

  public String getPassword() {
    return preferences.get("db_password", null);
  }

  // your code here
}

在此代码中,setCredentials 方法在显示输入对话框后设置用户名和密码。连接到数据库时,getUsername 和 getPassword 方法检索存储的值。凭证不会硬编码到二进制文件中,从而减轻了反编译带来的安全风险。

重要说明:

  • 首选项文件是纯文本 XML 文件。防止未经授权的用户访问它们(UNIX 和 Windows 权限等)。
  • 正确的架构取决于应用程序上下文。如果用户知道(并且被授权知道)凭证,则上述解决方案有效。但是,如果试图向用户隐藏凭据,建议使用多层架构,其中中间层对用户进行身份验证并授予有限的操作。
  • 在多层架构中,用户拥有自己的凭据进行身份验证业务逻辑层,但不是数据库。因此,客户端应用程序永远不会直接连接到数据库。

以上是如何保护 Java 代码中的 MySQL 凭证免遭反编译?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn