如何安全地存储外部应用程序的用户密码?

时间:2013-12-10 16:55:56

标签: ruby-on-rails encryption

我正在使用Rails构建一个应用程序,并将从时间跟踪应用程序Harvest中提取时间表。我正在使用名为harvested的API包装器。为了能够与他们的API接口,我需要提供子域名,用户名和密码。

现在,我只是将密码存储为纯字符串,并且没有进行任何加密。想要在存储到DB之前加密它们。如果我在存储之前加密密码,我是否仍然可以使用加密密码进行Harvester API验证?

1 个答案:

答案 0 :(得分:2)

出于这个原因,OAuth存在。存储明文显然是一个坏主意,但存储加密然后解密的东西也是一个坏主意。

现代密码流使用单向加密:加密密码,然后将其与数据库中的已加密值进行比较。这允许使用可以容易加密但基本上不可能解密的算法。使用允许应用程序轻松解密数据库字段的算法也允许攻击者也这样做。

使用单向流(仅限加密),即使用户获得加密密码,它们也无法使用,因为在测试有效性之前,在密码框中输入的任何内容都将再次通过加密。

<强> TL; DR 像其他人指出的那样使用OAuth:https://github.com/harvesthq/api/blob/master/Authentication/OAuth%202.0.md