24

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

显然,将敏感数据保存在代码中会危及它。

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

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

那么常见的处理方法是什么?

4

5 回答 5

10

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

*secure.yml filter=crypt

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

[filter "crypt"]
    clean = openssl enc ...
    smudge = openssl enc -d ...
    required
于 2012-11-15T20:00:49.313 回答
4

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

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

于 2012-10-18T11:09:42.747 回答
3

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

第 1 步:创建:res/values/secrets.xml,其中:

<!-- 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

这是完整的文章

于 2017-10-26T20:02:57.707 回答
2

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

有关更多信息,请参阅此问题;给你一个很好的报价:

当您排除或忽略时,您只是在阻止文件被添加到您的存储库中。没有任何“敏感文件”文件甚至在存储库中,只是在您的工作目录中。

于 2012-03-04T15:37:37.860 回答
0

“默认”秘密信息文件是个好主意,但是,即使您忽略该文件,也无法避免 git 警告。从github 帮助页面

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

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

取消跟踪文件会将其从 github 中删除,这违背了首先拥有该文件的目的。

也许子模块建议会起作用。

于 2012-03-06T21:04:58.387 回答