Τρόπος κατάργησης των ευαίσθητων αρχείων από το 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?} 

Αυτό θα σας επιτρέψει να διορθώσετε την ελαττωματική δέσμευση και θα επαναλάβει όλες τις υπόλοιπες δεσμεύσεις μετά την επιδιόρθωση, ώστε να μην τις χάσετε.

Ήδη ώθησε

Εάν κάνατε ώθηση, υπάρχει μια σημαντική διαφορά μεταξύ δημόσιων και ιδιωτικών αποθετηρίων.

Εάν το αποθετήριο σας είναι ιδιωτικό και δεν υπάρχουν bots ή άτομα που δεν εμπιστεύεστε με πρόσβαση σε αυτό, μπορείτε εύκολα να τροποποιήσετε την τελευταία δέσμευση χρησιμοποιώντας τις δύο παραπάνω εντολές.

Εάν προωθήσατε μια δέσμη δεσμεύσεων πάνω από το προβληματικό, μπορείτε ακόμα να χρησιμοποιήσετε φίλτρο-κλάδο ή καθαριστικό repo BFG για να αφαιρέσετε το ευαίσθητο αρχείο από το ιστορικό git :

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

Αλλά λάβετε υπόψη δύο σημαντικές πτυχές αυτών των αλλαγών:

  • Αλλάζετε πραγματικά την ιστορία

    Εάν υπάρχουν άλλα άτομα, άλλα υποκαταστήματα, άλλα πιρούνια ή ανοιχτά τραβήγματα που βασίζονται στην τρέχουσα κατάσταση του αποθετηρίου, θα τα σπάσετε. Σε αυτές τις περιπτώσεις, αντιμετωπίστε το αποθετήριο σαν να ήταν δημόσιο και αποφύγετε να αλλάξετε το ιστορικό.

  • Πρέπει να διαγράψετε την προσωρινή μνήμη

    Πρέπει πάντα να επικοινωνήσετε με την υποστήριξη του παροχέα αποθήκευσης Git και να τους ζητήσετε να εκκαθαρίσετε την προσωρινή μνήμη του αποθετηρίου σας. Ακόμα κι αν διορθώσατε την προβληματική δέσμευση ή ξαναγράψατε το ιστορικό, η παλιά δέσμευση με το ευαίσθητο αρχείο παραμένει στην κρυφή μνήμη. Θα πρέπει να γνωρίζετε το αναγνωριστικό του για πρόσβαση σε αυτό, αλλά εξακολουθεί να είναι προσβάσιμο μέχρι να διαγράψετε την προσωρινή μνήμη.

Πρέπει να δημιουργήσω ξανά κλειδιά εάν προωθηθώ σε δημόσιο αποθετήριο;

Εν ολίγοις, ναι. Εάν το αποθετήριο σας είναι δημόσιο ή δεν νομίζετε ότι είναι ασφαλές μέρος για οποιονδήποτε άλλο λόγο, πρέπει να λάβετε υπόψη τις ευαίσθητες πληροφορίες που διακυβεύονται.

Ακόμα κι αν αφαιρέσετε τα δεδομένα από το αποθετήριο σας, δεν μπορείτε να κάνετε τίποτα για bots και άλλα πιρούνια του repo. Ποια είναι λοιπόν τα επόμενα βήματα;

  • Απενεργοποιήστε όλα τα κλειδιά και / ή τους κωδικούς πρόσβασης

    Κάντε το ως το πρώτο βήμα. Μόλις απενεργοποιήσετε τα κλειδιά, οι ευαίσθητες πληροφορίες γίνονται άχρηστες.

  • Ρυθμίστε το gitignore

    Προσθέστε όλα τα ευαίσθητα αρχεία στο .gitignore για να βεβαιωθείτε ότι το git δεν θα τα παρακολουθεί.

  • Καταργήστε το ευαίσθητο αρχείο
  • Δώστε τη λύση με μια ουσιαστική εξήγηση

    Μην προσπαθήσετε να κρύψετε το λάθος. Άλλοι συνεργάτες και εσείς σε έναν μήνα θα εκτιμήσετε την εξήγηση του τι συνέβη και τι επιδιορθώνει αυτό.

Βέλτιστες πρακτικές κατά την αποθήκευση ευαίσθητων δεδομένων στο Git

Για να αποφύγετε μια τέτοια κατάσταση στο μέλλον, ακολουθούν μερικές συμβουλές για την αποθήκευση ευαίσθητων δεδομένων:

Διατηρήστε ευαίσθητα δεδομένα σε αρχείο .env (ή παρόμοιο αρχείο σε άλλες πλατφόρμες)

Διατηρήστε τα κλειδιά API και άλλα ευαίσθητα δεδομένα σε ένα αρχείο .env. Με αυτόν τον τρόπο δεν θα δεσμεύσετε κατά λάθος ένα νέο κλειδί όταν το αρχείο .env έχει ήδη εξαιρεθεί από το git.

Ένα άλλο μεγάλο πλεονέκτημα είναι ότι έχετε πρόσβαση σε όλα τα κλειδιά χρησιμοποιώντας μια καθολική μεταβλητή διαδικασίας .

Χρησιμοποιήστε τα κλειδιά API εάν είναι δυνατόν

Τα κλειδιά API είναι εύκολο να δημιουργηθούν και να απενεργοποιηθούν σε περίπτωση παραβίασης. Εάν είναι δυνατόν, χρησιμοποιήστε τα και αποφύγετε τη χρήση διαπιστευτηρίων / κωδικών πρόσβασης.

Προσθέστε κλειδιά API στο εργαλείο δημιουργίας σας

Τα κλειδιά API απαιτούνται συνήθως κατά τη διάρκεια της δημιουργίας εφαρμογών. Τα εργαλεία κατασκευής όπως το Netlify σάς επιτρέπουν να προσθέσετε αυτά τα κλειδιά στις ασφαλείς περιοχές της διαχείρισής τους. Αυτά τα κλειδιά εισάγονται αυτόματα στην εφαρμογή σας μέσω της καθολικής μεταβλητής διαδικασίας .

Προσθέστε το αρχείο .env στο gitignore

Βεβαιωθείτε ότι το Git δεν παρακολουθεί αρχεία που περιέχουν ευαίσθητες πληροφορίες.

Δώστε .env.template αρχείο

Το αρχείο προτύπου δίνει εντολή σε άλλους συνεργάτες να προσθέσουν τα απαραίτητα κλειδιά API χωρίς να απαιτείται από αυτούς να διαβάσουν μακρά έγγραφα.

Μην αλλάξετε το ιστορικό στο τηλεχειριστήριο

Χρησιμοποιήστε το ως κανόνας. Εάν ακολουθήσατε τους παραπάνω κανόνες, δεν θα χρειαστεί να αλλάξετε το ιστορικό.

Ελπίζω ότι αυτές οι πληροφορίες σας βοήθησαν να παραμείνετε στην ασφαλή πλευρά. Έχετε μια προσωπική εμπειρία με την ασυγκίνητη ή ίσως ένα καλό μάθημα ; Μίλα μου στο Twitter :-)