【问题标题】:Rails database - how to store encrypted data using the user's password?Rails 数据库 - 如何使用用户密码存储加密数据?
【发布时间】:2011-04-26 03:40:58
【问题描述】:

我有一个将保存敏感数据的数据库,因此应该在数据库中对其进行加密。基本上,敏感数据是另一个网站的凭据。所以我想用用户密码+盐来加密它们。

要解密凭据,需要密码。

我看到了两种方式: 登录时,我可以解密凭据,然后将它们存储在会话中?那安全吗?

对用户来说更难的是在解密存储的密码/ID 之前再次询问密码?

我们不希望自己有任何使用存储凭据的能力。

【问题讨论】:

    标签: ruby-on-rails database security encryption passwords


    【解决方案1】:

    为此,我强烈推荐“Security on Rails”。这是一个棘手的话题,因此您需要花一些时间阅读才能正确理解。它们完全涵盖了这个主题,包括如何对加密数据进行加盐、单元测试以确保它被加密等等。

    他们的示例代码展示了如何向 ActiveRecord::Base 添加类方法,以便您可以在一行代码中加密任何数据库列。绝对是惯用的 Rails 方法。

    这是一本很棒的读物——单元测试让我大吃一惊,所以说真的……去吧。

    顺便说一句,当你说

    我们不希望有任何能力 自己使用存储的凭据。

    您意识到,由于您的代码从用户的浏览器接收未加密的数据,因此您确实可以在数据在磁盘上加密之前访问内存中的数据,或者在用户以后想要使用该数据时未加密时访问。坏人可以访问这些数据,如果他们 root 你的盒子,偷偷把东西放进 Ruby eval() 等等。

    不过,加密数据确实有很大帮助。例如SQL注入攻击无法获取解密数据。

    【讨论】:

    • 您始终可以在客户端加密数据,而永远不会在服务器端处理未加密的数据。然后攻击者将不得不改变客户端行为以及服务器端行为,所有这些都没有任何人注意到(更难)
    • 对于问题中的场景,他需要处理未加密的其他网站的凭据,以便他的网站可以代表用户登录其他网站。
    猜你喜欢
    • 2012-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2011-04-26
    • 2011-08-28
    • 2016-12-25
    相关资源
    最近更新 更多