Ruby on rails 两个“;访问代码“;而不是",;用户名";及;密码;?
我有时使用的信息系统有两个密码屏蔽的访问代码 这仅仅是一种隐蔽性安全措施(能够在观众面前输入用户名和密码),还是与传统的用户/通行证或令牌/秒相比有任何其他优势 当我为我的商业伙伴和我自己建立自己的公司时,我正在考虑这一点。这对用户来说是好的还是烦人的、无用的、无法描述的东西Ruby on rails 两个“;访问代码“;而不是",;用户名";及;密码;?,ruby-on-rails,security,authentication,Ruby On Rails,Security,Authentication,我有时使用的信息系统有两个密码屏蔽的访问代码 这仅仅是一种隐蔽性安全措施(能够在观众面前输入用户名和密码),还是与传统的用户/通行证或令牌/秒相比有任何其他优势 当我为我的商业伙伴和我自己建立自己的公司时,我正在考虑这一点。这对用户来说是好的还是烦人的、无用的、无法描述的东西 如果这是一个好主意,那么如何使用user.authenticate()?在安全性方面,访问代码可能比用户和密码稍微安全一些,因为它们加密正确。这是我的意见 对于Rails,您必须记住3个重要因素: 谁在使用你的系统 他们将
如果这是一个好主意,那么如何使用
user.authenticate()
?在安全性方面,访问代码
可能比用户
和密码
稍微安全一些,因为它们加密正确。这是我的意见
对于Rails,您必须记住3个重要因素:
design
)一起使用预览
排序模式,我将创建一系列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
我在某个地方找到了这段代码(不幸的是,我忘记了在哪里),但它基本上使用回调来填充用户
模型的公钥
属性
公钥是使用方法创建的我不会实现这样的系统,因为
- 用户名/ID(第一个“访问代码”)不必是秘密;虽然它不应该公开机密信息(由策略定义),但此密钥的目的不是“增加安全性”,并且使其难以记忆会让人们感到烦恼-至少,它会让我感到烦恼 如果用户因为太难记住而不得不写下“秘密”。。然后,任何有权访问录音的人(例如文本文件、便笺)都有权访问可能不是秘密的秘密
- 提高密码(第二个“访问代码”)安全性的方法是鼓励使用比“密码”更简单的密码短语P@ssw0rds!“记住(而且比随机密码更容易记住!),但是。密码/密码短语是秘密令牌
假设使用适当的连接加密和使用声音BCRIPT/ScRyPT密码散列(并且不遭受Heartbleed或本地密钥监听等攻击向量),那么接下来的考虑是减轻暴力攻击。
- 将username/ID(第一个“访问代码”)字段屏蔽可能有用/相关,就像密码字段一样。这可以防止在输入用户名/ID字段时意外暴露密码/密码短语的情况,例如在现场观众面前进行身份验证。(这个错误我已经犯过好几次了。) 但是,其目的不是增加安全性,除非它可以减轻事故,因为用户名/ID不是密码:它不是“加密的”、散列的,或者被认为是秘密的
- 在需要提高安全性的情况下,可以使用额外的凭证提供程序(例如RSA fob或智能卡/指纹/公开密钥)。适当使用这样的密码比“两个密码”更安全