我一直在阅读有关通过加密所有内容来保护用户数据的网络服务。万一数据库被盗,一切都是安全的(前提是我们假设所有常见的密码学内容)。
我正在使用 Sqlite 之上的 DataMapper ORM 来玩一个小型 Sinatra 应用程序(并不是真的打算启动它,它更多的是用于教育目的)。我实现了基本的用户身份验证(散列和加盐……简而言之,所有常见的东西),我对此很满意。
事实是,该应用程序的核心需要有关用户的个人信息:体重和其他 body 测量数据(毫无疑问,这些数据可能被视为个人和敏感数据,人们可能不想公开这些数据)。所以我想知道,我怎样才能安全地存储这些数据?在应用程序中,所有内容都只能由适当的用户访问(尽管我是这方面的初学者并且几乎所有内容都是手工编码的,但我很确定存在很多安全漏洞......但正如我所说我不是真的打算用它做任何事)。
我想过用用户密码加密,认证成功后解密,但是密码忘记了怎么办?如果密码被更改了怎么办?我读到(在 SO 上)出于这些原因,最好不要以这种方式进行。但是如何才能完成呢?
最佳答案
您可以执行 gem install attr_secure
,然后对 ruby 对象执行以下操作:
设置您的环境的 ATTR_SECURE_SECRET,因此在应用程序中执行 ENV["ATTR_SECURE_SECRET"] 是可行的。此外,为加密值设置/更改任何表列,以便它们可以保存长的加密值。
现在您可以执行此操作(来自 attr_secure 自述文件的示例):
class Report < ActiveRecord::Base
attr_secure :secret_value
end
r = Report.new
r.secret_value = "ThisIsATest"
r.save
=> #<Report id: 116, secret_value: "EKq88AMFeRLqEx5knUcoJ4LOnrv52d7hfAFgEKMoDKzqNei4m7k...">
r = Report.find(116)
r.secret_value
=> "ThisIsATest"
您可以在以下位置阅读更多信息:https://github.com/neilmiddleton/attr_secure
关于ruby - 敏感数据加密 - DataMapper + Sinatra,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15321266/