我正在用Rails構建一個應用程序,並將從時間表Harvest這個時間跟蹤應用程序中抽取時間表。我正在使用名爲harvested的API封裝器。爲了能夠與他們的API接口,我需要提供一個子域名,用戶名和密碼。如何安全地存儲外部應用程序的用戶密碼?
現在,我只是將密碼存儲爲純字符串,並沒有進行任何加密。希望在存儲到數據庫之前加密它們。如果我在存儲之前對密碼進行加密,我仍然可以使用加密的密碼進行Harvester API驗證嗎?
我正在用Rails構建一個應用程序,並將從時間表Harvest這個時間跟蹤應用程序中抽取時間表。我正在使用名爲harvested的API封裝器。爲了能夠與他們的API接口,我需要提供一個子域名,用戶名和密碼。如何安全地存儲外部應用程序的用戶密碼?
現在,我只是將密碼存儲爲純字符串,並沒有進行任何加密。希望在存儲到數據庫之前加密它們。如果我在存儲之前對密碼進行加密,我仍然可以使用加密的密碼進行Harvester API驗證嗎?
OAuth存在這個原因。存儲明文顯然是一個壞主意,但存儲加密的東西,然後解密也是一個壞主意。
現代密碼流使用單向加密:加密密碼,然後將其與已加密的數值進行比較。這允許使用可以容易地加密但基本上不可能解密的算法。使用允許應用程序輕鬆解密數據庫字段的算法也可以讓攻擊者也這樣做。
使用單向流程(僅限加密),即使用戶獲取加密密碼,它們也是不可用的,因爲密碼框中輸入的任何內容都將在測試有效性之前再次通過加密。
TL; DR 使用OAuth爲別人指出:https://github.com/harvesthq/api/blob/master/Authentication/OAuth%202.0.md
謝謝你的建議,泰勒。儘管如此,我最終解決了這個問題。我只是將密碼加密到了Harvester API所期望的auth_string中。我猴子補丁我使用的寶石,這樣我可以通過auth_string而不是用戶名和未加密的密碼。 – Gjaldon
不要那樣做。相反,使用OAuth。 https://github.com/harvesthq/api/blob/master/Authentication/OAuth%202.0.md – SLaks
永遠不會以明文存儲密碼! EVER! – phoet
這就是爲什麼我問我該怎麼做。該應用程序仍然沒有在生產,所以它應該不是一個問題。 – Gjaldon