2014-11-21 90 views
1

我使用the attr_encrypted gem,我也得到了設計安裝在我的環境。attr_encrypted和devise,加密用戶數據與用戶密碼

我得到這個由色器件處理的用戶模型和數據庫列是: encrypted_pa​​ssword

用戶可以保存客戶和我要加密的客戶姓名和年齡與用戶的密碼。

我的client.rb文件如下所示: 這裏數據被成功加密。

class Client < ActiveRecord::Base 

    attr_accessor :name :age 
    attr_encrypted :name, :age, key: "test1234" 

但我想使用Users.password加密數據。 東西像這樣:

class Client < ActiveRecord::Base 

    attr_accessor :name :age 
    attr_encrypted :name, :age, key: current_user.encrypted_password 

的CURRENT_USER是設計輔助方法,但由於這是從一個會議上,我不能在模型訪問它。 基本上我想用用戶密碼加密所有客戶端的東西。 但是,如果我用encrypted_pa​​ssword來做這件事,那麼我已經得到了解密整個字段的密碼。 我想爲我的用戶提供安全性,我不想知道或能夠查看他們的數據。 所以唯一的方法是用prehashed devise users password加密所有數據?

編輯:

的user.encrypted_pa​​ssword已經哈希,每當我訪問DB - 我可以用它來解密所有數據嗎?

所以我應該要求用戶密碼 - >散列它像設計一樣 - 比較它與users.encrypted_pa​​ssword?

我在某處有邏輯錯誤嗎?

你會如何解決這個問題?

+0

http://stackoverflow.com/questions/2513383/access-current-user-in-model – 2014-11-21 17:16:14

回答

0

attr_encrypted提供了一種指定實例方法來提供密鑰的方法。

class Client < ActiveRecord::Base 
    attr_encrypted :name, :age, key: :client_key 

    def client_key 
    # just assuming relation between Client and User 
    self.user.encrypted_password 
    end 
end 

來源:https://github.com/attr-encrypted/attr_encrypted#symbols-representing-instance-methods-as-keys

+0

所以,當我選擇user.encrypted_pa​​ssword它已經哈希值 - 但我有權訪問它。當我檢索用戶表的encrypted_pa​​ssword時,我可以解密所有客戶端嗎? – 2014-11-21 17:34:58

0

當你使用設計,它使用bcrypt算法來加密你的密碼是一個單向加密

即這一過程是不可逆的,有沒有辦法從散走回密碼。 ,所以你可以使用該散列來加密整個數據。

但我的建議是使用bcrypt算法來加密數據,而不是使用用戶密碼,爲什麼我建議bcrypt,而不是使用您的密碼哈希加密您的數據

  • 你將不得不重新 - 每當用戶 更改密碼時加密數據如果在任何情況下您都不這樣做,您不會 能夠將您的數據回收。
  • 的塔頂將更加即每次重新加密上 密碼變化
  • 的encrypted_pa​​ssword將被非常緊密地連接至所述用戶 數據的數據。我覺得用戶數據應該是獨立的,訪問與密碼 的並且應該有一個不同的獨立 使用數據加密這是不相關的用戶登錄或 密碼

您也可以參考:https://github.com/codahale/bcrypt-ruby

+0

你的問題給了我一些見解,但對我來說仍然很抽象。所以你會建議跳過所有的加密,因爲它只是不好?我的主要目標仍然是我想要加密數據而不能讀取數據。只有用戶應該能夠閱讀他/她的數據。 – 2014-11-29 14:21:42

+1

我的意思是加密不是很好,但事實是,你只能讀取用戶的數據,當你訪問服務器和數據庫,並且如果任何人有權訪問服務器和數據庫,我不認爲只是加密數據庫或用戶表將有助於應用程序在用戶訪問數據時解密數據,因此任何有權訪問服務器的人都可以輕鬆解密數據。 保護用戶數據的最佳方式是提供多級安全性。 但是,如果你想加密,所以你可以剔除 [鏈接](https://github.com/spikex/strongbox) – SRDP 2014-11-30 09:34:03

+0

好吧謝謝你,將檢查出來。 – 2014-11-30 22:41:39