【发布时间】:2023-02-08 22:20:22
【问题描述】:
最近我们添加了一个工具来查找我们组织中的安全漏洞。发现的问题之一是当连接到数据库时(例如使用 Hikari),我们必须提供一个包含密码的字符串(当然是加密的,使用时会解密)。
现在,将密码保存在字符串中并不安全,因为它可以被提取,直到垃圾收集器出现并清除它。
所以我们开始更改我们的代码以使用 char[] 和 byte[](不确定这是最好的,但想法是我们可以在使用后清除数组,而不是等待垃圾收集器为我们清除它)来设置我们的Hikari 上的密码,但流程的最后一部分是为 Hikari 设置一个未加密的密码字符串。所以所有这些大惊小怪的事情都是为了发现 Hikari 将密码保存在一个字符串中。
那么我是否应该更改 Hikari 代码并将其重新编译为我们自己的 Hikari 组织实现,它使用来自 char[] 的密码?或者是什么?
我们怎样才能避免这种情况?
【问题讨论】:
-
“现在,将密码保存在字符串中并不安全……所以我们开始更改代码以使用 char[] 和 byte[]“你认为字符串如何存储它们的字符?Java 9 之前的
char[]和现在的byte[]。这个练习毫无意义。你只是让你自己的生活变得更加艰难,最多 - 给攻击者带来轻微的不便。@ 987654321@ -
“它可以被提取,直到垃圾收集器出现并清除它" 如果攻击者可以物理访问您的服务器内存,那么您遇到的问题比他们读取密码还要大。
-
也许应该忽略“工具”?不要做计算机告诉你做的所有事情。
-
因此,根据您的 cmets,我的理解是这是毫无意义的,使用加密字符串很好。正确的?
-
你说的是客户端还是服务器?