Rails数据库-如何使用用户密码存储加密数据?

4
我有一个数据库,将保存敏感数据,因此应在数据库中进行加密。基本上,敏感数据是另一个网站的凭据。因此,我想使用用户密码+盐对它们进行加密。
要解密凭据,需要密码。
我看到两种方式: 在登录时,我可以解密凭据,然后将它们存储在会话中。这样安全吗?
或者 对用户来说更难一些的是,在解密存储的密码/ID之前再次询问密码。
我们不希望有任何能力使用存储的凭据。
1个回答

2
我强烈推荐阅读"Rails安全指南",这是一个棘手的话题,因此你需要花些时间去阅读,以便正确理解。书中涵盖了如何对加密数据进行加盐、如何单元测试以确保数据已加密等内容,包含了本文所讨论的具体主题。
书中的示例代码展示了如何向ActiveRecord::Base添加类方法,使得你可以在一行代码中将任何数据库列都加密。这绝对是一种典型的Rails方法。
这是一篇很棒的文章--其中的单元测试真是让人印象深刻,所以...请务必阅读。
顺便提一句,当你说:

我们不想有任何使用储存的凭据的能力。

请注意,因为你的代码从用户浏览器接收到未加密的数据,所以在数据加密之前,或者在用户稍后需要使用该数据时进行解密时,你确实可以在内存中访问该数据。如果黑客入侵了你的系统、在Ruby的eval()函数中插入了恶意代码等,那么坏人可能会获取到这些数据。
然而,加密数据确实可以大大提高数据安全性。例如,SQL注入攻击无法获取解密后的数据。

你可以始终在客户端加密数据,从未在服务器端处理未加密的数据。攻击者必须同时更改客户端和服务器端的行为,而且没有人会注意到(更难)。 - Slartibartfast
对于问题中的场景,他需要处理其他网站的凭据,以便他的网站可以代表用户登录到其他网站,而这些凭据是未加密的。 - Harold L

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接