Как вы обрабатываете конфиденциальные данные в публичном репозитории git? - PullRequest
21 голосов
/ 04 марта 2012

Как вы обрабатываете конфиденциальные данные, такие как секретные ключи API, хеш-соли, когда вы храните свой код в публичном git-репо?

Очевидно, что хранение конфиденциальных данных в коде поставит под угрозу это.

Другое решение состоит в том, чтобы не жестко закодировать секретную информацию в коде, а сохранить ее в отдельном файле и gitignore файл.Это имеет недостаток, заключающийся в том, что когда кто-то извлекает ваш код в первый раз, секретная информация будет отсутствовать, и она не выйдет из коробки.Это можно объяснить написанием подпрограммы «инициализация, если отсутствует» в коде, но затем вы позволяете системе git проскользнуть в ваш код, что не очень хорошо для ИМО.

И еще одно решениесоздайте файл секретной информации «по умолчанию», зафиксируйте его в начале проекта, а затем используйте свою собственную информацию без ее фиксации.Но это может заставить git жаловаться на то, что у вас есть незафиксированные изменения, когда вы тянете.

Так, как обычно это обрабатывается?

Ответы [ 5 ]

9 голосов
/ 16 ноября 2012

Попробуйте использовать .gitattributes для пути с настроенным фильтром шифрования / дешифрования:

*secure.yml filter=crypt

А в .git / config добавьте конфигурацию для фильтра шифрования:

[filter "crypt"]
    clean = openssl enc ...
    smudge = openssl enc -d ...
    required
3 голосов
/ 18 октября 2012

Возможно, вам не следует жестко задавать эти свойства в исходный код, поскольку администратор захочет изменить их в данной системе. Если эти свойства находятся в файле свойств (например, в вашем домашнем каталоге), проблема решена.

Для пользователей, которые могут столкнуться с проблемами, вы можете проверить файл по умолчанию, который они могут скопировать в свою домашнюю папку и изменить. Если сообщения об ошибках и README ясны на предмет отсутствия этого конкретного файла, эта установка будет работать достаточно хорошо.

2 голосов
/ 26 октября 2017

Если кому-то нужно для своего проекта 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

вот полная статья

2 голосов
/ 04 марта 2012

Лучшим решением будет закрытый git submodule и публичный репозиторий git.

См. этот вопрос для получения дополнительной информации;хорошая цитата для вас:

Когда вы исключаете или игнорируете, вы просто не позволяете добавлять файлы в ваш репозиторий.ни один из файлов «конфиденциальных файлов» даже не находится в хранилище, только в вашем рабочем каталоге.

0 голосов
/ 07 марта 2012

Файл секретной информации «по умолчанию» - хорошая идея, однако нет способа избежать предупреждений git, даже если вы игнорируете файл.На странице справки github :

git не будет игнорировать файл, который уже отслеживался до добавления в этот файл правила, чтобы игнорировать его.В таком случае файл должен быть неотслеживаемым, обычно с git rm --cached filename

. Следовательно, добавление файла-пустышки или файла по умолчанию, а затем его игнорирование не предотвратит предупреждения.Хотя этот подход будет работать, он будет неудобен, так как вам всегда придется вручную исключать чувствительный файл из каждого коммита.

При удалении файла он удаляется из github, что лишает цели наличия файла в первомplace.

Возможно, предложение подмодуля сработает.

...