代码之家  ›  专栏  ›  技术社区  ›  kubi

在Git存储库中处理密码的最佳实践是什么?

  •  182
  • kubi  · 技术社区  · 14 年前

    我有一个小的bash脚本,用于访问Twitter,并在某些情况下弹出咆哮通知。用脚本存储密码的最佳方法是什么?

    我想把这个脚本提交给git repo,并使它在github上可用,但是我想知道在这样做的同时保持我的登录名/密码隐私的最佳方法是什么。当前密码存储在脚本本身中。我不能在推之前删除它,因为所有旧提交都将包含密码。没有密码的开发不是一个选项。我想我应该将密码存储在一个外部配置文件中,但是我想在我尝试将一些东西组合在一起之前,我会检查一下是否有一种已建立的方法来处理这个问题。

    6 回复  |  直到 6 年前
        1
  •  218
  •   Greg Hewgill    14 年前

    执行此操作的典型方法是从配置文件中读取密码信息。如果调用配置文件 foobar.config ,然后提交一个名为 foobar.config.example 到存储库,包含示例数据。要运行程序,您将创建一个本地(未跟踪)文件,名为 FoabAR.CONFIG 与你 真实的 密码数据。

    要从以前的提交中筛选出现有密码,请参阅上的GitHub帮助页 Removing sensitive data .

        2
  •  22
  •   tripleee    6 年前

    一种方法是使用环境变量设置密码(或API密钥)。 所以这个密码超出了修订控制。

    使用bash,可以使用

    export your_env_variable='your_password'
    

    这种方法可以与诸如 Travis ,您的代码(不带密码)存储在 GitHub 存储库可以由Travis执行(使用环境变量设置密码)。

    使用bash,可以使用以下方法获取环境变量的值:

    echo "$your_env_variable"
    

    使用python,可以使用以下方法获取环境变量的值:

    import os
    print(os.environ['your_env_variable'])
    

    附言:请注意,这可能有点危险(但这是一种很常见的做法) https://www.bleepingcomputer.com/news/security/javascript-packages-caught-stealing-environment-variables/

    PS2:这个 dev.to 题为 "How to securely store API keys" 读起来可能很有趣。

        3
  •  16
  •   Community dbr    7 年前

    什么 Greg said 但我想补充一点,签一份文件是个好主意 foobar.config-TEMPLATE .

    它应该包含示例名称、密码或其他配置信息。那么,很明显真正foobar.config应该包含什么,而不必查看所有必须包含值的代码。 foobar.config 以及他们应该采用的格式。

    配置值通常是不明显的,比如数据库连接字符串和类似的东西。

        4
  •  3
  •   icc97    7 年前

    一个人可以用 Vault 它保护、存储和控制对令牌、密码、证书、API密钥等的访问。 Ansible 使用 Ansible Vault 它处理播放手册中使用的密码或证书

        5
  •  1
  •   Be Kind To New Users    6 年前

    以下是我使用的一种技术:

    我在我的主文件夹中创建了一个名为: .config

    在那个文件夹中,我将配置文件放在我想要外部化密码和密钥的任何数量的东西上。

    我通常使用反向域名语法,例如:

    com.example.databaseconfig

    然后在bash脚本中,我这样做:

    #!/bin/bash
    source $HOME/.config/com.example.databaseconfig ||exit 1
    

    这个 || exit 1 使脚本在无法加载配置文件时退出。

    我在bash、python和ant脚本中使用了这种技术。

    我很偏执,不认为.gitignore文件足够强大,可以防止意外签入。另外,没有任何监控程序,所以如果确实发生了签入,没有人会发现可以处理它。

    如果一个特定的应用程序需要多个文件,我将创建子文件夹而不是单个文件。

        6
  •  0
  •   icc97    7 年前

    如果您使用的是RubyonRails,那么FigaroGem非常好、简单和可靠。在生产环境中,其头痛因子也较低。