两个“访问代码”而不是“用户名”和“密码”?

时间:2014-05-27 04:39:00

标签: ruby-on-rails security authentication

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

这只是一种通过默默无闻的措施(能够在观众面前输入用户名和密码)的安全措施,还是比传统的用户/通行证或令牌/秘密更具优势?

在为我的商业伙伴和我自己构建自己的IS时,我正在考虑这个问题。对于用户来说,这有什么好处或者只是令人烦恼和无用的不可取的东西吗?

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

2 个答案:

答案 0 :(得分:1)

实施这样的系统,因为..

  • 用户名/ ID(第一个"访问代码")不一定是秘密;虽然它不应该暴露机密信息(由政策定义),但这个密钥的目的是到"添加安全性"并且难以记住会让人烦恼 - 至少,它会让我烦恼。

    如果用户必须写下"秘密"因为它太难记住了......那么任何有权访问录音的人(例如文本文件,便利贴)都可以访问可能不是秘密的秘密。

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

    假设使用正确的连接加密并使用声音bcrypt / scrypt 密码哈希(并且没有遭受诸如Heartbleed或本地密钥的攻击向量),那么下一个考虑是缓解暴力攻击。

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

话虽如此,这里还有其他想法..

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

    然而,目标是来增加安全性,除了它可以减轻意外,因为用户名/ ID 是密码:它不是< / em>&#34;加密&#34;,哈希或以其他方式被视为秘密。

  • 在需要增强安全性的情况下,可以使用其他凭据提供程序(例如RSA FOB或智能卡/指纹/ pub-private密钥)。适当使用这些很多比两个密码更安全&#34;。

答案 1 :(得分:0)

就安全性而言,access codes可能比user&amp; pass,考虑到它们已正确加密。这是我的意见

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

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

    公钥

    如果您要创建一种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回调来填充public_key模型的User属性。

    使用SecureRandom方法

    创建公钥