Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 两个“;访问代码“;而不是",;用户名";及;密码;?_Ruby On Rails_Security_Authentication - Fatal编程技术网

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或智能卡/指纹/公开密钥)。适当使用这样的密码比“两个密码”更安全


    您是否了解您可能使用哪种身份验证系统,或者您是否会使用自己的身份验证系统?谢谢。我还将屏蔽用户名字段,并使用现有的经验证的解决方案:)