[英]Where do I hash the password?
我正在使用MVC,我想知道在哪一點上哈希用戶密碼:
例如在聲明中使用"set password = sha256(:password)"
我有點困惑,我一直在創建對象並設置字段“密碼”時對密碼進行哈希處理,但我在某處讀到了它不夠安全。 我不確定。
在視圖中:這太高了。 您的應用程序中幾乎肯定會有多個視圖使用密碼(兩個簡單的視圖:登錄表單和密碼更改表單),並且視圖中的密碼散列會導致重復。
在數據庫中:太低了。 數據庫永遠不應該看到明文密碼; 在某些情況下,執行此操作最終會通過網絡發送明文密碼,將其顯示在錯誤消息中,或將其寫入數據庫日志。 此外,數據庫支持的大多數哈希函數太快而不能保證密碼存儲的安全性。
在模型中:恰到好處。 我建議在用戶對象上實現類似的方法:
$user->setPassword($password) # sets password to specified value $user->passwordEquals($password) # returns true if value passed in matches the password
請注意,這些方法都沒有公開密碼或它的存儲方式 - 這都是對象的實現細節。
盡快將其哈希在服務器上。 即。 一旦收到客戶的請求。 你真的沒有使用原始密碼的業務。 存儲哈希,忘掉它。
根據經驗,您應該將密碼或密碼的密碼視為熱土豆:您希望盡快停止處理它們。
此外,如果服務器進程受到威脅,您不希望敏感信息潛伏在服務器的內存中。 這就是為什么你應該避免讓原始密碼在內存中停留太久。
首先獲取該字段中的值。 然后應用hash
函數。 在控制器中執行上述操作,然后調用模型以存儲在數據庫中。 它會讓你更好地理解。
(我不是專家......很高興分享我的信息.. :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.