关于在静态变量中存储密码的漏洞[重复]

Posted

技术标签:

【中文标题】关于在静态变量中存储密码的漏洞[重复]【英文标题】:Vulnerability regarding storing password in static variables [duplicate] 【发布时间】:2021-09-21 14:23:35 【问题描述】:

从属性文件中读取密码后将密码存储在静态变量中是否安全?我看到有关于密码不应该存储在字符串 (java) 中的最佳实践,但我找不到有人讨论在应用程序的整个生命周期中将密码存储在静态 (string/char[]) 变量中。

将密码存储在静态变量中会导致密码暴露于外部世界的额外威胁吗?连接到外部系统后是否应该释放密码变量?

【问题讨论】:

密码几乎肯定不在静态变量中。除了安全隐患之外,这还降低了包含此静态变量的类的可重用性,因为这实际上是一个单例。 【参考方案1】:

用于将密码存储在本地存储中

    您可以加密密码并将其存储到静态中,再次使用您可以再次将密码解密为普通字符串密码。 您可以创建 SQLite DB 并将其以加密模式存储。 您还可以将其以加密形式存储在共享共享首选项中

对于加密和解密,您可以使用以下参考: a SO post

【讨论】:

密码应该被解密为“普通”字符串(因为它们是不可变的,它们在内存中的持续时间比所需的时间长得多,因此增加了泄露明文密码的风险)。 这就是为什么客户端数据库很少见的原因——它们几乎不可能得到保护。如果你必须有一个数据库客户端,你应该在运行时输入密码。但不可取。

以上是关于关于在静态变量中存储密码的漏洞[重复]的主要内容,如果未能解决你的问题,请参考以下文章

java 8中存储的静态变量在哪里? [重复]

关于静态变量 [重复]

关于类型的存储时间和链接

关于java静态存储类的一个知识点

关于静态变量和非静态变量的区别

关于java静态变量取值的问题。