2013-03-10 101 views
2

我一直在阅读有关通过加密所有内容来保护用户数据的Web服务。在数据库被盗的情况下,一切都是安全的(假设我们假设所有常见的密码术)。加密敏感数据 - DataMapper + Sinatra

我正在玩一个小型的Sinatra应用程序(并非真正计划启动它,它更多用于教育目的)在Sqlite上使用DataMapper ORM。我实现了基本的用户身份验证(哈希和腌制......所有常见的东西,简而言之),我对此感到满意。

事实是,应用程序的核心需要关于用户的个人信息:权重和其他身体测量(可以毫无疑问地认为个人和敏感数据,人们可能不想公开)。所以我想知道如何安全地存储这些数据?在应用程序中,所有内容都只能由正确的用户访问(虽然在这方面相当新手,而且手工编写几乎所有东西,但我确信有很多安全漏洞......但正如我所说的,我不是真的打算做任何事情)。

我想过使用用户密码对它进行加密并在成功验证后对其进行解密,但是如果忘记密码会怎么样?如果密码更改会怎么样?我读过(在这里),由于这些原因,最好不要这样做,但是那怎么办呢?

+0

这是个不错的办法使用密码加密,你必须每当密码更改时更新日期,如果密码丢失,那么数据也是如此。但是,您需要确保用户密码安全地加密。你也可以使用基于开放标识的身份验证,说他们的Facebook个人资料。 +1好问题 – nikhil 2013-03-10 10:45:04

+3

@nikhil我不同意,使用密码加密是一个坏主意。使用密码进行_allow_解密很好。 Helios,我建议看看[让数据库处理它](http://dba.stackexchange.com/questions/3585/postgresql-row-level-encryption),或使用[rbnacl](https:// github .com/cryptosphere/rbnacl)或只是[标准库](http://stackoverflow.com/questions/4128939/simple-encryption-in-ruby-without-external-gems)加密访问。 – iain 2013-03-10 11:24:49

+0

我不知道postgresql中的这个功能。如果是这种情况,那么你的方法肯定会好得多。 – nikhil 2013-03-10 16:00:22

回答

0

你可以做一个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