16. Пошук секретів у коді (getleaks). Пошук залежностей Composer, які не використовуються
Відео версія
(YouTube - для зворотнього зв'язку)
Пошук залежностей, які не використовуються
Пакет для пошуку залежностей, які не використовуються: composer-unused.
Оскільки Laravel вміє в auto-discover пакетів, деякі пакети можуть не зустрічатися в коді. Їх можна ігнорувати в конфігураційному файлі.
<?php
use ComposerUnused\ComposerUnused\Configuration\Configuration;
use ComposerUnused\ComposerUnused\Configuration\NamedFilter;
return static function (Configuration $config): Configuration {
$config
// деякий коментар, чому пакет використовується
->addNamedFilter(NamedFilter::fromString('some/package'));
return $config;
};
Також раджу додати на git pre-push hook і, звісно ж, до CI/CD скрипту. Тут одна порада — команди, що виконуються швидше, ставте першими (якщо не паралельно). Це скоріше дасть розробнику зворотний зв'язок та не запустить зайві команди.
docker exec -t bh-app ./vendor/bin/composer-unused
Пошук секретів
Паролі, приватні ключі та все секретне не повинно бути як в git, так і в git історії.
Будь-який сканер секретів вам підійде. Я використовую gitleaks.
Запускати сканер зручніше всього з Docker. Ідеально — останню версію. Це той випадок, де не треба використовувати фіксовану версію. Це важливо, оскільки база даних секретів може оновлюватися і знаходити раніше не знайдені секрети.
Gitleaks має 2 команди: protect
та detect
. detect
сканує git історію, а protect
— файли, що індексуються (--staged) або не індексуються в git.
Якщо ви знайшли секрет в git історії — швиденько змініть секрет у сервісі, секрет якого вже в коді. Робіть hotfix deploy.
А після цього додайте до allowlist конфігурації gitleaks.
[extend]
useDefault = true
[allowlist]
commits = []
useDefault = true
— обов'язково. Підключає налаштування за замовчуванням.allowlist
— може містити як коміти, так і назви файлів, директорій та regex.
Додавати перевірку раджу на pre-commit hook. Спершу оновіть Docker контейнер.
Для pre-commit hook команда protect
.
docker pull zricethezav/gitleaks:latest
docker run -v ./:/path zricethezav/gitleaks:latest protect \
--source="/path" \
--config=/path/.gitleaks.toml \
--report-path=/path/gitleaks-report.json \
--staged
І обов'язково як частина CI/CD, зручно окремою джобою, одразу з контейнеру. Тут обов'язково команда detect
.
secret-detection:
stage: test
image:
name: zricethezav/gitleaks
entrypoint: [ "" ]
script:
- gitleaks detect --config=.gitleaks.toml --report-path=gitleaks-report.json