【问题标题】:Store passwords in Ruby script在 Ruby 脚本中存储密码
【发布时间】:2014-10-13 15:28:46
【问题描述】:

我用 Ruby 编写了一个帮助脚本来通过一些服务器处理我的文件同步。它仅在我的 Intranet 中使用,并且通过 SSH 密钥进行身份验证。但是现在我想在不能使用 SSH 密钥的地方使用它,并且我想将密码存储在配置文件中。

我知道,有一些加密库,如 bcrypt 或 OpenSSL,但我有一个问题:

  1. 我启动我的脚本并输入我的密码,它存储在一个变量中以解密我的密码。
  2. 我的代码是开源的。

因此,可以与我的用户一起访问我的计算机(这将是我想扩展的第一个障碍)并查看内存(存储我的密码短语)的每个人都可以解密我的密码文件。在与安全相关的应用程序中如何处理?

Edith 作为对 DevDude 的回复说(但在这里,因为我想在我的问题中保留我的规范): 但是这个配置文件将是纯文本而不是加密的。当我加密这个文件时,我认为还有两个问题:

  1. super_secret_pwd 将存储在一个变量中,所以当我在计算机的内存中搜索时,我会找到它,不是吗?
  2. 用于加密的主密码也将以纯文本形式保存在内存中。

所以最大的问题是:是否可以从内存中读取纯文本变量?据我所知,这在 C 中是可能的,并且存在很大的安全问题。

【问题讨论】:

    标签: ruby security encryption passwords


    【解决方案1】:

    您正在寻找的是使用带有密码/API 密钥的 YAML 文件。并且永远不要将此文件签入您的存储库。

    然后你可以在你的初始化器上引用这个文件,也许将密码设为全局变量或 x,使用 configatron 等。

    这基本上是生产应用程序的工作方式,它们从存储在服务器本身的 YAML 文件中读取重要设置。

    这是我用的:

    @c = configatron
    
    # Per environment settings
    app_settings = YAML.load_file('config/secret_stuff.yml')
    
    @c.password = app_settings['super_secret_pwd']
    

    不要使用 ENVIRONMENT 变量,因为它们存在各种安全问题。它们是一种反模式。

    【讨论】:

      猜你喜欢
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2018-07-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多