Зашто git log открива тајне чак и након што су „избрисане“
Брисање линије из датотеке и commitУношење промене заправо не уклања осетљиве податке из вашег репозиторијума. Ако је та тајна, API кључ, акредитив или токен икада била commitТеде, то се налази у твојој Гит историји. Свако ко користи git log -p, гит сховили испитивање разлика у односу на прошлост commitјош увек могу да га преузму.
Чак и ако пребришете датотеку или замените вредност, гит лог чува комплетно порекло сваке промене. Ово је дизајнирано. Читав Гитов модел је заснован на непроменљивим commit историја и дистрибуиране копије. Дакле, осим ако експлицитно не препишете историју, ваше тајне су и даље ту. Ево једног практичног случаја:
⚠️ Образовни пример, не покрећи у продукцији
Прекасно. гит лог и даље приказује тај кључ у почетном commit.
Заблуде око git stash-а и git rebase-а
Многи програмери претпостављају гит стасх помаже у скривању или чишћењу тајни. Није тачно. гит стасх само полице радни директоријум мења се привремено; никада се не дотиче commit историја. Ако је икада постојала тајна commitТед, накнадно чување промена не помаже у чишћењу.
Шта у вези гит ребасеИако може преписати историју, то мора бити урађено преcisЕли. Само трчим git rebase -i и преуређивање или стискање commits не уклања тајне осим ако их експлицитно не измените или изоставите. И ако постоји чак и један клон или форк са оригиналом commitс, твоја тајна живи даље.
Још горе, ребазирање без исправног присилног гурања или поновне координације са сарадницима може поново увести изложене акредитиве путем спајања.
⚠️ Образовни пример, не користити у стварним окружењима
⚠️ Образовни пример, не покрећи на продукционим репозиторијумима
Уредите commit садржи тајну, али заборавите да је уклоните. твој гит лог моћ погледати чистији, али осетљиви садржај се и даље може повратити.
Ризици из стварног света због заборављених акредитива у историји Гита
Ово није теоретски. Нападачи активно скенирају јавна и приватна складишта тражећи тајне које се крију у commit историје. GitHub форкови, огледални репозиторијуми и кеширани CI/CD pipelineсви могу да крију те заборављене жетоне.
- Процурели API кључ из старог гит лог довело је до хиљада наплата у облаку за један стартап.
- OAuth токени commitтед, затим „избрисани“, коришћени су за отмицу корисничких налога.
- Тајне закопане дубоко у форковима пројеката отвореног кода изазвале су велике безбедносне инциденте.
Ови проблеми се увећавају CI/CDСваки задатак који клонира репозиторијум се покреће гит лог испод хаубе, и сваки артефакт изградње може потенцијално да садржи трагове откривених тајни.
Чишћење осетљивих података помоћу команде git filter-repo
Ако је штета већ настала, најпоузданији алат за њено чишћење је гит филтер-репо. за разлику од гит ребасе, који преписује појединац commits, гит филтер-репо може преписати целу commit историја заснована на путањама датотека, обрасцима или садржају.
Пример: да се пречисте сва појављивања цонфиг.јсон које могу садржати тајне:
⚠️ Образовни пример, проверите у тестном репозиторијуму пре употребе у продукцији
Или да уклоните све commitкоји укључују одређени стринг (нпр. АВС_СЕЦРЕТ_АЦЦЕСС_КЕИ):
⚠️ Образовни пример, проверите у тестном репозиторијуму пре употребе у продукцији
Будите опрезни: Ово ће преписати commit хешеви. Мораћете да извршите присилно слање и обавестите све сараднике. Сви кључеви за аутоматизацију или имплементацију повезани са commit Хешеви ће се покварити.
Такође, алати попут BFG Repo-Cleaner нуде сличне могућности, али су мање флексибилни и сада се сматрају застарелим за сложене случајеве.
Спречавање цурења тајних информација пре него што стигну до Гита
Превенција је боља од чишћења. Ево како да спречите да тајне икада открију гит лог:
1. Pre-commit Hooks
Користите алате попут pre-commit, гитликс, Или талисман да скенирам тајне пре commits:
2. CI/CD Pipeline примењивање
интегрисати тајно откривање у ваше CI послове. Неуспешне изградње када се пронађу тајни подаци. Учините ово политиком.
3. Управљање тајнама
Никада не кодирајте акредитиве. Користите променљиве окружења, трезоре или менаџере тајних података од првог дана.
4. Зависности ревизије
Не верујте слепо пакетима трећих страна. Тајне могу да процуре путем npm, PyPI или Docker слојева.
Коначно решење: Прочистите тајне помоћу git filter-repo-а
Брисање тајни из кода није довољно. гит лог води потпуну евиденцију осим ако не предузмете намерну акцију преправљања историје. Не ослањајте се на гит стасх или полупечено гит ребасе покушаји. Користите гит филтер-репо када вам је потребно дубинско чишћење и спроведите политике и скенирање пре него што тајне уопште стигну до вашег спремишта.
За проактивно откривање тајни, размислите о коришћењу алата као што су Ксигени да обезбеди своје pipelineс, спровести commit хигијену и спречити скупа цурења пре него што се појаве. Гит никада не заборавља, али можете се побринути да никада не памти ваше тајне.





