2013-03-10 100 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