我正在维护一个现有的 Java 产品(它有一个巨大的代码库)。我发现它在不少于 4-5 个不同的地方(方法)设置(和获取)两个内部密码作为 Java 系统属性。现在,问题是,密码以纯文本形式存储在 Java 系统属性中,因此对于外部实体也是可见的,因为应用程序没有使用任何 Java 安全管理器。例如,如果应用程序(进程)在端口号 1234 上运行,我们可以运行 Java 命令:
jinfo -sysprops 1234
将这两个密码视为相应 Java 系统属性的值。我想问一下,在不过多更改现有代码库的情况下是否有任何补救措施?期望的效果是对所有外部实体“隐藏”两个 Java 系统属性(表示两个密码)。
需要注意的是,在应用程序中引入 Java 安全管理器可能不是一个解决方案,如果我们使用 Java 安全管理器撤销这两个 Java 系统属性的读取权限,读取这些属性的应用程序代码就会崩溃。同样适用于以加密形式存储密码,因为这会使应用程序中所有希望以明文形式读取密码的代码崩溃。