【问题标题】:How to securely store user passwords for an external application?如何安全地存储外部应用程序的用户密码?
【发布时间】:2013-12-10 16:55:56
【问题描述】:

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

现在,我只是将密码存储为纯字符串,并没有进行任何加密。想在存储到数据库之前对它们进行加密。如果我在存储之前对密码进行了加密,我还可以使用加密后的密码通过 Harvester API 进行身份验证吗?

【问题讨论】:

标签: ruby-on-rails encryption


【解决方案1】:

OAuth 正是出于这个原因而存在。存储纯文本显然是个坏主意,但存储加密的内容然后解密也是个坏主意。

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

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

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

【讨论】:

  • 感谢您的建议,泰勒。我最终以不同的方式解决了这个问题。我刚刚将密码加密为 Harvester API 所期望的 auth_string。我对我使用的 gem 进行了猴子修补,以便我可以传递 auth_string 而不是用户名和未加密的密码。
猜你喜欢
  • 2010-12-07
  • 2010-12-07
  • 2018-07-31
  • 1970-01-01
  • 2012-11-09
  • 2012-06-14
  • 2019-04-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多