你如何处理公共git仓库中的敏感数据?

时间:2012-03-04 15:28:45

标签: git sensitive-data

当您将代码保存在公共git仓库中时,如何处理秘密API密钥,哈希盐等敏感数据?

显然,将敏感数据保留在代码中会对其造成损害。

另一个解决方案是不对代码中的秘密信息进行硬编码,而是将其存储在独立文件中并对文件进行gitignore。这样做的缺点是,当有人第一次提取您的代码时,秘密信息将会丢失,并且不会开箱即用。这可以通过在代码中编写“初始化,如果缺少”例程来解释,但是然后你让git系统进入你的代码,这对IMO来说不是一件好事。

另一个解决方案是创建一个“默认”秘密信息文件,在项目开始时提交它,然后使用您自己的信息而不提交它。但这可能会让git抱怨你在拉动时有未经提交的更改。

那么处理这个问题的常用方法是什么?

5 个答案:

答案 0 :(得分:9)

尝试将.gitattributes用于配置加密/解密过滤器的路径:

*secure.yml filter=crypt

在.git / config中添加crypt过滤器的配置:

[filter "crypt"]
    clean = openssl enc ...
    smudge = openssl enc -d ...
    required

答案 1 :(得分:3)

可以说,您不应该将这些属性硬编码到源中,因为管理员希望该选项在给定系统上更改它们。如果这些属性位于属性文件中(例如,在您的主目录中),问题就解决了。

对于可能遇到问题的用户,您可以签入他们可以复制到其主文件夹并进行修改的默认文件。如果错误消息和自述文件清楚地显示缺少此特定文件的主题,则此设置将非常有效。

答案 2 :(得分:2)

最佳解决方案是私有git submodule和公共git存储库。

有关详细信息,请参阅this quesiton;给你一个很好的报价:

  

当您排除或忽略时,您只是将文件保留在存储库中。没有任何“敏感文件”文件甚至存储在存储库中,只是在您的工作目录中。

答案 3 :(得分:2)

如果有人需要他们的Android项目,我找到最简单的方法:

第1步: create:res / values / secrets.xml with:

<!-- Inside of `res/values/secrets.xml` -->
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="parse_application_id">xxxxxx</string>
    <string name="parse_client_secret">yyyyyy</string>
    <string name="google_maps_api_key">zzzzzz</string>
</resources>

第2步:在代码或xml文件中使用它

getString(R.string.parse_application_id),
getString(R.string.parse_client_secret)

<meta-data
    android:name="com.google.android.maps.v2.API_KEY"
    android:value="@string/google_maps_api_key"/>

第3步:将此行添加到.gitignore文件

 **/*/res/values/secrets.xml

这是完整的article

答案 4 :(得分:0)

“默认”秘密信息文件是一个好主意,但是,即使您忽略该文件,也无法避免git警告。来自github help page

  

git不会忽略规则之前已经跟踪过的文件   添加到此文件以忽略它。在这种情况下,文件必须是   未跟踪,通常使用git rm --cached filename

因此,添加“虚拟”或“默认”文件然后忽略它不会阻止警告。虽然该方法可行,但由于您始终必须从每次提交中手动排除敏感文件,因此会很不方便。

取消跟踪文件会将其从github中删除,这样就无法将文件放在首位。

也许子模块建议可行。