在 Ruby 中安全擦除内存中的密码



我正在编写一个需要处理用户企业密码的Ruby应用程序。我想尽量减少密码在内存中的时间,以减少密码暴露的可能性。

在母语中,我会直接删除数据。在 C# 中,我会使用 SecureString 类。在 Java 中,我会使用 char[]。但是我能找到的关于 Ruby 的最好的是一个似乎已经死了的旧功能请求。

在 Ruby 中安全地存储和擦除内存中的密码的标准是什么?有没有一个类可以做到这一点?类似于 Java char[]的编码模式?

一个 ruby 问题已经存在了 5 年 (5741),关于从内存中安全擦除机密。该问题还包含一些链接,这些链接解释了为什么从内存中删除密码是一件好事。最近MacOS确实在FileVault2上遇到了问题,因为密码存储在内存中。

问题 5741 中显示的一种可能的解决方案是:

pass = ""
$stdin.sysread(256, pass) # assuming a line-buffered terminal
io = StringIO.new("" * pass.bytesize)
io.read(pass.bytesize, pass)

它似乎适用于 ruby 2.3.1p112,但我不能保证。

最新更新