
Корпоративный способ обнаружения и предотвращения секретов в коде.
detect-secrets — это удачно названный модуль для (сюрприз, сюрприз) обнаружения секретов в кодовой базе.
Однако, в отличие от других подобных пакетов, которые сосредоточены исключительно на поиске секретов, этот пакет разработан с учетом корпоративных клиентов: предоставляя обратно совместимые, систематические средства для:
Таким образом вы создаете разделение ответственности: принимая тот факт, что в вашем большом репозитории в настоящее время могут скрываться секреты (это то, что мы называем базовым уровнем), но предотвращая усугубление этой проблемы, не затрачивая потенциально гигантские усилия по удалению существующих секретов.
Он делает это путем периодического сравнения результатов diff с эвристически составленными регулярными выражениями, чтобы определить, был ли зафиксирован какой-либо новый секрет. Таким образом, это позволяет избежать накладных расходов на просмотр всей истории git, а также необходимости сканировать весь репозиторий каждый раз.
Чтобы ознакомиться с последними изменениями, см. CHANGELOG.md.
Если вы хотите внести свой вклад, см. CONTRIBUTING.md.
Для более подробной документации ознакомьтесь с нашей документацией.
Создайте базовый уровень потенциальных секретов, обнаруженных на данный момент в вашем git-репозитории.```bash $ detect-secrets scan > .secrets.baseline
или, чтобы запустить его из другой директории:```bash
$ detect-secrets -C /path/to/directory scan > /path/to/directory/.secrets.baseline
Сканирование файлов, не отслеживаемых git:```bash $ detect-secrets scan test_data/ --all-files > .secrets.baseline
### Добавление новых секретов в базовый уровень:
Это повторно просканирует вашу кодовую базу и:
1. Обновит/улучшит ваш базовый уровень для совместимости с последней версией,
2. Добавит любые новые найденные секреты в ваш базовый уровень,
3. Удалит секреты, которых больше нет в вашей кодовой базе
Это также сохранит любые помеченные вами секреты.```bash
$ detect-secrets scan --baseline .secrets.baseline
Сканирование только промежуточных файлов:
Для базовых линий старше версии 0.9 просто воссоздайте её.```bash $ git diff --staged --name-only -z | xargs -0 detect-secrets-hook --baseline .secrets.baseline
**Сканирование всех отслеживаемых файлов:**```bash
$ git ls-files -z | xargs -0 detect-secrets-hook --baseline .secrets.baseline
$ detect-secrets scan --list-all-plugins ArtifactoryDetector AWSKeyDetector AzureStorageKeyDetector BasicAuthDetector CloudantDetector DiscordBotTokenDetector GitHubTokenDetector GitLabTokenDetector Base64HighEntropyString HexHighEntropyString IbmCloudIamDetector IbmCosHmacDetector IPPublicDetector JwtTokenDetector KeywordDetector MailchimpDetector NpmDetector OpenAIDetector PrivateKeyDetector PypiTokenDetector SendGridDetector SlackDetector SoftlayerDetector SquareOAuthDetector StripeDetector TelegramBotTokenDetector TwilioKeyDetector
### Отключение плагинов:```bash
$ detect-secrets scan --disable-plugin KeywordDetector --disable-plugin AWSKeyDetector
Если вы хотите запустить только определенный плагин, вы можете сделать следующее:```bash
$ detect-secrets scan --list-all-plugins |
grep -v 'BasicAuthDetector' |
sed "s#^#--disable-plugin #g" |
xargs detect-secrets scan test_data
### Аудит базовой линии:
Это необязательный шаг для маркировки результатов в вашей базовой линии. Он может использоваться для сужения
списка секретов для переноса или для лучшей настройки ваших плагинов с целью улучшения соотношения сигнал-шум.```bash
$ detect-secrets audit .secrets.baseline
Базовое использование:```python from detect_secrets import SecretsCollection from detect_secrets.settings import default_settings
secrets = SecretsCollection() with default_settings(): secrets.scan_file('test_data/config.ini')
import json print(json.dumps(secrets.json(), indent=2))
**Более продвинутая конфигурация:**```python
from detect_secrets import SecretsCollection
from detect_secrets.settings import transient_settings
secrets = SecretsCollection()
with transient_settings({
# Only run scans with only these plugins.
# This format is the same as the one that is saved in the generated baseline.
'plugins_used': [
# Example of configuring a built-in plugin
{
'name': 'Base64HighEntropyString',
'limit': 5.0,
},
# Example of using a custom plugin
{
'name': 'HippoDetector',
'path': 'file:///Users/aaronloo/Documents/github/detect-secrets/testing/plugins.py',
},
],
# We can also specify whichever additional filters we want.
# This is an example of using the function `is_identified_by_ML_model` within the
# local file `./private-filters/example.py`.
'filters_used': [
{
'path': 'file://private-filters/example.py::is_identified_by_ML_model',
},
]
}) as settings:
# If we want to make any further adjustments to the created settings object (e.g.
# disabling default filters), we can do so as such.
settings.disable_filters(
'detect_secrets.filters.heuristic.is_prefixed_with_dollar_sign',
'detect_secrets.filters.heuristic.is_likely_id_string',
)
secrets.scan_file('test_data/config.ini')
$ pip install detect-secrets ✨🍰✨
Установка через [brew](https://brew.sh/):```bash
$ brew install detect-secrets
detect-secrets поставляется с тремя различными инструментами, и часто возникает путаница в том, какой из них использовать. Используйте этот удобный контрольный список, чтобы принять решение:
detect-secrets scan.detect-secrets-hook.detect-secrets audit.