Подтвердить что ты не робот

Как вы обрабатываете конфиденциальные данные в общедоступном репозитории git?

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

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

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

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

Итак, каков общий способ справиться с этим?

4b9b3361

Ответ 1

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

*secure.yml filter=crypt

И в .git/config добавьте конфигурацию фильтра склепа:

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

Ответ 2

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

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

Ответ 3

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

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

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

Ответ 4

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

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

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

Отслеживание файла удаляет его из github, что портит цель иметь файл в первую очередь.

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

Ответ 5

Если кому-то нужен проект Android, есть самый простой способ:

шаг 1: create: 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

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