我有时使用的信息系统有2个密码屏蔽的访问代码。
这只是一种通过默默无闻的措施(能够在观众面前输入用户名和密码)的安全措施,还是比传统的用户/通行证或令牌/秘密更具优势?
在为我的商业伙伴和我自己构建自己的IS时,我正在考虑这个问题。对于用户来说,这有什么好处或者只是令人烦恼和无用的不可取的东西吗?
如果这是一个好主意,如何使用user.authenticate()
实现它?
答案 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个重要因素:
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
回调来填充public_key
模型的User
属性。
使用SecureRandom
方法