Перший крок - не чистка історії, а відкликання секрету. Щойно ключ потрапив у віддалений репозиторій, вважайте його скомпрометованим: його вже могли скопіювати клони, CI, форки, боти, що сканують GitHub. Чистка історії не поверне контроль.
Порядок дій:
- Відкликати й замінити секрет: новий API-ключ, новий пароль бази, ротація токенів. Оновити його в усіх місцях, де він використовується.
- Перевірити журнали сервісу на підозріле використання за час, поки ключ був відкритий.
- Прибрати з коду і перенести секрет туди, де він має жити:
.env(у.gitignore), менеджер секретів, змінні CI. - За потреби - переписати історію, щоб секрет не лишався в старих комітах:
git filter-repo(рекомендований інструмент) чи BFG. Потім force push і повідомити команду: усім потрібно переклонувати репозиторій, інакше старі коміти повернуться з чиєїсь копії. На GitHub ще може знадобитися звернутися в підтримку, щоб прибрати кешовані подання й посилання з pull request.
Як не допустити:
.env, ключі й дампи - в.gitignoreз самого початку; у репозиторії лише.env.exampleбез значень.- Сканування секретів: GitHub secret scanning з push protection,
gitleaksчиtrufflehogу pre-commit і CI. - Короткоживучі облікові дані замість вічних ключів (OIDC для CI, тимчасові токени).
Laravel-специфіка: витік APP_KEY дозволяє підробляти зашифровані cookie й підписані URL - його теж ротують, пам'ятаючи, що зашифровані старим ключем дані доведеться перешифрувати (APP_PREVIOUS_KEYS допомагає з переходом).
Докладніше в документації: Видалення чутливих даних з репозиторію