Cara menghapus file sensitif dari repositori Git

File diindeks, pesan komit ditulis, data dikirim ke server ... Dan tiba-tiba Anda ingin memutar kembali waktu. Komit berisi file yang seharusnya tidak ada di sana. Ketika itu terjadi, saatnya untuk pergi ke mesin pencari.



Setiap pengembang pada satu waktu memiliki file dengan informasi rahasia ke repositori publik secara tidak sengaja. Bagaimana cara mengatasi masalah seperti itu? Bagaimana cara memastikan bahwa hal seperti ini tidak terjadi lagi?



Dalam artikel ini, saya akan memberi tahu Anda apa yang harus dilakukan jika file secara tidak sengaja masuk ke repositori yang sama sekali tidak ada hubungannya di sana. Di sini saya akan memberikan perintah Git yang memungkinkan Anda mengoreksi riwayat, dan membagikan beberapa rekomendasi untuk mengatur pekerjaan aman dengan informasi rahasia.





Menghapus file sensitif dari repositori Git ( gambar besar )



Meminimalkan kerusakan



Jadi, Anda secara tidak sengaja melakukan file dengan informasi rahasia. Sebut saja file ini .env. Segera setelah ini terjadi, Anda perlu mengajukan beberapa pertanyaan kepada diri sendiri:



  • Apakah komit telah didorong ke repositori jarak jauh?
  • Apakah repositori jarak jauh dapat diakses publik?


▍Commit belum dikirim ke repositori jarak jauh



Jika Anda belum mengirim komit ke repositori, maka, secara umum, situasi yang muncul tidak menimbulkan ancaman apa pun. Untuk memperbaiki semuanya, Anda hanya perlu kembali ke komit sebelumnya:



git reset HEAD^ --soft


File akan tetap berada dalam copy pekerjaan repositori, Anda dapat membuat perubahan yang diperlukan pada proyek.



Jika Anda ingin mempertahankan komit dan Anda hanya perlu menghapus file tertentu darinya, lakukan ini:



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


Parameter --amendini hanya dapat digunakan untuk bekerja dengan komit terbaru. Jika Anda menambahkan beberapa lagi setelah komit gagal, gunakan perintah ini:



git rebase -i HEAD~{    ?}


Ini akan memperbaiki komit yang salah dan akan membantu Anda tidak kehilangan perubahan yang dibuat pada proyek oleh komit lain.



▍Commit telah dikirim ke repositori jarak jauh



Jika Anda telah mendorong komit ke repositori jarak jauh, maka, pertama-tama, Anda perlu tahu tentang perbedaan antara repositori publik dan privat.



Jika repositori Anda bersifat pribadi dan tidak dapat diakses oleh bot atau orang yang tidak Anda percayai, Anda cukup mengubah komit terakhir menggunakan beberapa perintah di atas.



Jika Anda telah mendorong komit lain ke repositori setelah komit bermasalah, ini tidak akan mencegah Anda dari menghapus file sensitif dari riwayat Git Anda menggunakan perintah git filter-branch atau alat BFG Repo-Cleaner .



Berikut contoh penggunaan git filter-branch:



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


Namun saat melakukan ini, ingatlah dua aspek penting dari perubahan yang dilakukan pada repositori:



  • Git. , - , , PR, . .
  • . , , . , , , , . , ID, , .


Apakah saya perlu membuat kunci rahasia baru jika versinya saat ini ada di repositori publik?



Jika Anda menjawab pertanyaan di judul dengan singkat, maka - itu perlu. Jika repositori Anda tersedia untuk umum, atau jika Anda, karena alasan apa pun, yakin bahwa ini bukan tempat untuk menyimpan data sensitif, Anda perlu mempertimbangkan data rahasia yang masuk ke dalamnya sebagai telah disusupi.



Meskipun Anda menghapus data ini dari repositori, Anda tidak dapat melakukan apa pun dengan bot dan garpu repositori. Bagaimana cara melanjutkannya?



  • Nonaktifkan semua kunci atau kata sandi. Ini harus dilakukan dulu. Setelah Anda menonaktifkan kunci, informasi rahasia yang telah diketahui publik menjadi tidak berguna.
  • Sesuaikan file .gitignore. Perhatikan .gitignorecatatan file dengan informasi sensitif agar Git tidak akan memantau status file tersebut.
  • Siapkan komit yang tidak berisi file sensitif.
  • Kirimkan perubahan ke repositori, berikan komit dengan penjelasan tentang situasinya. Jangan mencoba menyembunyikan kesalahannya. Semua pemrogram yang mengerjakan proyek, termasuk Anda, akan menghargai keberadaan komit dalam repositori dengan penjelasan situasi dan deskripsi tentang apa yang telah diperbaiki dengan komit ini.


Praktik terbaik untuk menyimpan file sensitif dalam project yang menggunakan Git untuk kontrol versi



Untuk mencegah kebocoran informasi rahasia, Anda harus mematuhi rekomendasi berikut.



▍Simpan data sensitif dalam file .env (atau file serupa lainnya)



Simpan kunci API dan informasi serupa dalam satu file .env. Dengan pendekatan ini, jika Git tidak melacak status file .env, dengan menambahkan kunci baru ke file ini, Anda tidak akan secara tidak sengaja mendorongnya ke repositori.



Keuntungan lain dari pendekatan ini adalah dengan cara ini Anda akan memiliki akses ke semua kunci melalui variabel global process.



▍Gunakan kunci API jika memungkinkan



Kunci API yang disusupi mudah dinonaktifkan dan dibuat ulang. Jika memungkinkan - gunakanlah, dan bukan sesuatu seperti login dan kata sandi.



▍Simpan kunci API menggunakan alat build Anda



Kunci API biasanya dibutuhkan saat membangun aplikasi. Alat build seperti Netlify memungkinkan Anda menyimpan kunci di brankas yang aman. Kunci tersebut secara otomatis dimasukkan ke dalam aplikasi menggunakan variabel global process.





Manajemen Variabel Lingkungan



▍Tambahkan entri file .env ke file .gitignore



Mencegah Git melacak file sensitif.



▍Siapkan file template .env.template



Memiliki file template seperti itu membantu mereka yang mengerjakan sebuah proyek untuk menambahkan kunci API ke proyek, menghilangkan kebutuhan untuk membaca dokumentasi.



▍Jangan mengubah riwayat Git di repositori jarak jauh



Cobalah untuk tetap berpegang pada aturan ini dengan ketat. Jika Anda telah mengikuti pedoman di atas, Anda tidak perlu mengubah riwayat Git Anda.



Hasil



Saya harap materi saya akan membantu Anda bekerja dengan aman dengan data rahasia.



Pernahkah Anda mengirimkan sesuatu ke repositori publik yang seharusnya tidak ada di sana?










All Articles