【问题标题】:Two "access codes" instead of "username" and "password"?两个“访问代码”而不是“用户名”和“密码”?
【发布时间】:2014-07-15 21:06:15
【问题描述】:

我有时使用的信息系统有 2 个密码屏蔽的访问代码。

这只是一种隐蔽性措施(能够在观众面前输入用户名和密码)还是与传统的用户/通行证或令牌/密码相比有任何其他优势?

在为我的业务合作伙伴和我自己构建自己的 IS 时,我正在考虑这一点。这对用户来说有什么好处还是只是烦人且无用的难忘的东西?

如果这是个好主意,如何使用user.authenticate() 实现它?

【问题讨论】:

  • 您是否知道您可能使用哪种身份验证系统,或者您会推出自己的身份验证系统?

标签: ruby-on-rails security authentication


【解决方案1】:

在安全性方面,access codes 可能比userpass 稍微安全一些,因为它们已正确加密。这是我的看法

对于 Rails,您必须记住 3 个重要因素:

  1. 谁在使用您的系统
  2. 他们将如何参与身份验证领域
  3. 您是否使用任何其他系统(例如Devise)?

--

公钥

如果您希望创建某种preview 模式,我将创建一系列API 键,您可以使用它们来获得应用程序的有限功能。

我们这样做:

#users table
id | public_key | other | information | created_at | updated_at

#app/models/concerns/token.rb
module Token
    extend ActiveSupport::Concern

    included do
       before_create :generate_token
    end

    protected

    def generate_token
        self.public_key = loop do
           random_token = SecureRandom.urlsafe_base64(10, false)
           break random_token unless self.class.exists?(public_key: random_token)
        end
    end
 end

 #app/models/user.rb
 include Token

我在某个地方找到了这段代码(不幸的是我忘记了在哪里),但它基本上使用before_create 回调来填充User 模型的public_key 属性。

公钥是使用SecureRandom方法创建的

【讨论】:

    【解决方案2】:

    我不会实施这样的系统,因为..

    • 用户名/ID(第一个“访问代码”)不必是秘密;虽然它不应该暴露机密信息(由策略定义),但此密钥的目的是为了“增加安全性”并使其难以记住会惹恼人们 - 至少,它会惹恼我。

      如果用户必须写下一个“秘密”,因为它太难记了......那么任何有权访问记录(例如文本文件、便利贴)的人都可以访问可能不应该 -一个秘密。

    • 使用密码(第二个“访问代码”)提高安全性的方法是鼓励使用密码短语,这比“P@ssw0rds!”更容易记住(并且比随机密码更容易记住!),但是much harder to brute-force。密码/密码短语是秘密令牌。

      假设使用正确的连接加密并使用可靠的 bcrypt/scrypt密码散列(并且没有遭受诸如 Heartbleed 或本地密钥嗅探器之类的攻击向量),那么下一个考虑是减轻暴力攻击。

    我会专注于使用可靠的(现有和经过验证的)身份验证实施,以及安全的服务器管理和密钥策略。

    话虽如此,这里还有一些想法..

    • 将用户名/ID(第一个“访问代码”)字段屏蔽可能有用/相关,就像密码字段一样。这可以防止密码/密码短语在输入用户名/ID 字段时意外暴露的情况,例如在现场观众面前完成此类身份验证时。 (我已经多次看到这个错误。)

      然而目标是增加安全性,除了它可以减少事故,因为用户名/ID 不是密码:它是不是“加密”、散列或以其他方式视为机密。

    • 在需要提高安全性的情况下,可以使用额外的凭据提供程序(例如 RSA fob 或智能卡/指纹/pub-private 密钥)。适当使用这种密码比“两个密码”更安全。

    【讨论】:

    • 谢谢。我也将屏蔽用户名字段并使用现有且经过验证的解决方案:)
    猜你喜欢
    • 2021-11-27
    • 1970-01-01
    • 2013-06-10
    • 2013-11-05
    • 2015-03-13
    • 1970-01-01
    • 2019-04-19
    • 1970-01-01
    • 2013-09-27
    相关资源
    最近更新 更多