Как да деактивирам чувствителни файлове от Git

Фаза на сцената, добавете съобщение за фиксиране, натиснете Не - чакай! Не този файл. И сега трябва да започнем да гуглим.

Всеки разработчик случайно е извършил чувствителни файлове в миналото. И така, как да поправим ситуацията и да гарантираме, че тя няма да се повтори?

В тази статия ще ви обясня какво да правя, когато случайно ангажирате чувствителен файл и ще включите необходимите Git команди за коригиране на историята.

Контрол на щетите

Така че случайно сте извършили чувствителен файл. Нека го наречем .env . Има два важни въпроса, на които трябва да отговорите:

  • Избутахте ли фиксирането в отдалечено хранилище?
  • Отдалеченото хранилище публично ли е?

Все още не е натиснат

Ако все още не сте настоявали, ситуацията изобщо не е критична. Можете да се върнете към предишен ангажимент :

git reset HEAD^ --soft 

Вашите файлове ще останат в работното копие, за да можете да поправите чувствителния файл / информация. Ако искате да запазите фиксирането и просто да премахнете чувствителния файл , направете:

git rm .env --cached git commit --amend 

Можете да използвате --amendединствения при най-новия коммит. Ако сте успели да добавите още куп ангажименти отгоре, използвайте:

git rebase -i HEAD~{how many commits to go back?} 

Това ще ви позволи да коригирате дефектния коммит и ще повтори всички останали фиксирания след корекцията, така че няма да ги загубите.

Вече натиснат

Ако все пак натиснете, има важна разлика между публичните и частните хранилища.

Ако вашето хранилище е частно и няма ботове или хора, на които нямате доверие с достъп до него, можете лесно да промените последния фиксинг, като използвате двете команди по-горе.

Ако сте натиснали куп ангажименти отгоре на проблемния, пак можете да използвате филтър-клон или BFG репо чистач, за да премахнете чувствителния файл от историята на git :

git filter-branch --force --index-filter "git rm --cached --ignore-unmatch .env" --prune-empty --tag-name-filter cat -- --all 

Но имайте предвид два важни аспекта на тези промени:

  • Всъщност променяте историята

    Ако има други хора, други клонове, други разклонения или отворени заявки за изтегляне, разчитащи на текущото състояние на хранилището, ще ги разчупите. В тези случаи се отнасяйте към хранилището, сякаш е публично и избягвайте промяна на историята.

  • Трябва да изчистите кеша

    Винаги трябва да се свържете с поддръжката на вашия доставчик на хранилище за Git и да ги помолите да изчистят кеша на вашето хранилище. Въпреки че сте коригирали проблемния коммит или сте пренаписали историята, старият ангажимент с чувствителния файл остава в кеша. За достъп до него трябва да знаете неговия идентификатор, но той все още е достъпен, докато не изчистите кеша.

Трябва ли да регенерирам ключове, ако бъдат изтласкани към публично хранилище?

Накратко, да. Ако вашето хранилище е публично или не смятате, че е безопасно място по някаква друга причина, трябва да смятате, че поверителната информация е компрометирана.

Дори ако премахнете данните от хранилището си, не можете да правите нищо за ботове и други вилици на репото. И така, какви са следващите стъпки?

  • Деактивирайте всички ключове и / или пароли

    Направете това като първа стъпка. След като деактивирате клавишите, чувствителната информация става безполезна.

  • Коригирайте gitignore

    Добавете всички чувствителни файлове към .gitignore, за да сте сигурни, че git няма да ги проследи.

  • Премахнете чувствителния файл
  • Задайте корекцията със смислено обяснение

    Не се опитвайте да скриете грешката. Други сътрудници и вие след месец ще оцените обяснението какво се е случило и какво коригира този ангажимент.

Най-добри практики при съхраняване на чувствителни данни в Git

За да избегнете подобна ситуация в бъдеще, ето няколко съвета за съхраняване на чувствителни данни:

Съхранявайте чувствителни данни във .env файл (или подобен файл на други платформи)

Съхранявайте API ключовете и други чувствителни данни в един .env файл. По този начин няма да случайно да ангажирате нов ключ, когато .env файлът вече е изключен от git.

Друго голямо предимство е, че получавате достъп до всички ключове с помощта на глобална променлива на процеса .

Използвайте API ключовете, ако е възможно

API ключовете са лесни за генериране и деактивиране, ако са компрометирани. Ако е възможно, използвайте ги и избягвайте да използвате идентификационни данни / пароли.

Добавете API ключове към вашия инструмент за изграждане

API ключовете обикновено са необходими по време на изграждането на приложения. Инструменти за изграждане като Netlify ви позволяват да добавяте тези ключове в защитените области на тяхното администриране. Тези ключове автоматично се инжектират във вашето приложение чрез глобалната променлива на процеса .

Добавете .env файл към gitignore

Уверете се, че Git не проследява файлове, съдържащи поверителна информация.

Предоставете .env.template файл

Файлът на шаблона инструктира други сътрудници да добавят необходимите API ключове, без да изискват от тях да четат дълги документи.

Не променяйте историята на дистанционното

Използвайте това като правило. Ако сте спазили горните правила, няма да е необходимо да променяте историята.

Надявам се, че тази информация ви е помогнала да останете на сигурно място. Имате ли личен опит с неангажиращи или може би добър научен урок ? Говорете с мен в Twitter :-)