16. Пошук секретів у коді (getleaks). Пошук залежностей Composer, які не використовуються

Відео версія
(YouTube - для зворотнього зв'язку)

Пошук залежностей, які не використовуються

Пакет для пошуку залежностей, які не використовуються: composer-unused.

Оскільки Laravel вміє в auto-discover пакетів, деякі пакети можуть не зустрічатися в коді. Їх можна ігнорувати в конфігураційному файлі.

composer-unused.php
<?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 скрипту. Тут одна порада — команди, що виконуються швидше, ставте першими (якщо не паралельно). Це скоріше дасть розробнику зворотний зв'язок та не запустить зайві команди.

.husky/pre-push
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.

.gitleaks.toml
[extend]
useDefault = true

[allowlist]
commits = []
  • useDefault = true — обов'язково. Підключає налаштування за замовчуванням.
  • allowlist — може містити як коміти, так і назви файлів, директорій та regex.

Додавати перевірку раджу на pre-commit hook. Спершу оновіть Docker контейнер. Для pre-commit hook команда protect.

.husky/pre-commit
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.

.gitlab-ci.yml
secret-detection:
  stage: test
  image:
    name: zricethezav/gitleaks
    entrypoint: [ "" ]
  script:
    - gitleaks detect --config=.gitleaks.toml --report-path=gitleaks-report.json