Saya belum terbiasa dengan cara Git bekerja (Dan bertanya-tanya apakah seseorang selain Linus adalah;)).
Jika Anda menggunakan Heroku untuk meng-host aplikasi Anda, Anda harus memiliki kode Anda diperiksa dalam repo Git. Jika Anda bekerja pada proyek open-source, Anda kemungkinan besar akan membagikan repo ini di Github atau host Git lainnya.
Beberapa hal tidak boleh diperiksa di repo publik; kata sandi basis data, kunci API, sertifikat, dll ... Tetapi hal-hal ini masih perlu menjadi bagian dari repo Git karena Anda menggunakannya untuk mendorong kode Anda ke Heroku.
Bagaimana cara mengatasi use case ini?
Catatan: Saya tahu bahwa Heroku atau PHPFog dapat menggunakan variabel server untuk menghindari masalah ini. Pertanyaan saya lebih lanjut tentang bagaimana "menyembunyikan" bagian kode.
Jawaban:
Metode yang lebih disukai untuk menjaga kerahasiaan kata sandi / kunci api di heroku adalah dengan menetapkan nilai konfigurasi melalui aplikasi commandline heroku. Contoh berikut diambil dari artikel pusat heroku dev
(Contoh di bawah ini, dan seluruh jawaban saya terkait dengan aplikasi rails)
Kemudian referensi nilai-nilai konfigurasi ini dalam kode Anda menggunakan variabel ENV []
Dengan cara ini kata sandi sensitif Anda tidak disimpan di repositori git. (Catatan: Saat menjalankan aplikasi secara lokal, tetapkan nilai-nilai ini dalam
.bashrc
file AndaJuga, saya tidak yakin jenis aplikasi apa yang Anda jalankan, tetapi di Rails, heroku tidak menggunakan file database.yml Anda, itu hanya mengatur nama pengguna / kata sandi database Anda sesuai dengan pengaturan aplikasi Anda. Jadi Anda dapat menghindari menyimpan kredensial itu di git
Juga, jika Anda menjalankan aplikasi Anda sendiri dan ingin tetap pribadi, alternatif yang bagus untuk github adalah bitbucket yang menawarkan repositori pribadi gratis.
sumber
Beberapa ide ... Public Key Cryptography adalah jawaban yang paling fleksibel.
Kebingungan (hanya untuk kode)
Untuk bagian kode yang ingin Anda sembunyikan, dapatkah Anda menempatkannya di proyek yang berbeda, mengkompilasinya, dan memeriksa hanya kode yang dikompilasi, bukan sumbernya? Ini bukan enkripsi dan tidak cocok untuk mengenkripsi kata sandi atau kunci. Orang-orang masih dapat merekayasa ulang kode kompilasi Anda, tetapi mereka tidak mendapatkan sumbernya.
Repositori GIT pribadi
Apakah itu harus menjadi repositori git publik ?
Penyimpanan Server
Bisakah Anda menyimpan info ini dalam file yang dilindungi di direktori home dari akun pengguna yang dijalankan aplikasi tersebut? Saya akan menyalin cara ssh melakukan ini dengan ~ / .ssh / id_rsa dan chmod 600. Gagal, variabel lingkungan dapat digunakan. Anda memerlukan suatu tempat di server untuk menyimpan beberapa jenis kunci, atau Anda tidak dapat melindungi apa pun.
Kriptografi Symmetric (hanya untuk Anda)
Jika Anda adalah pengembang tunggal, Anda bisa meletakkan kunci di server dan memiliki kunci yang sama pada mesin Anda dan menggunakan skema enkripsi simetris untuk melindungi beberapa data seperti kata sandi atau sertifikat. Berbagi kunci simetris dengan teman menjadi berantakan.
Asymmetric Cryptography (untuk banyak pengembang)
Jika pengembang lain perlu memeriksa hal-hal rahasia ke dalam repositori git publik,, kunci publik / kunci privat (asimetris) kriptografi dibuat untuk hal semacam ini. Instal kunci pribadi di server Anda (jangan centang ke kontrol sumber!) Dan buat kunci publik darinya. Enkripsi data rahasia Anda menggunakan kunci publik server. Hanya server yang dapat mendekripsi data menggunakan kunci privatnya. Anda bahkan dapat memeriksa kunci publik ke dalam kontrol sumber sehingga orang lain dapat mengenkripsi data menggunakan kunci publik yang sama dan hanya server yang dapat mendekripsi itu.
Alat
Openssl mungkin satu-satunya alat kriptografi yang Anda butuhkan. Jangan menulis algoritma kriptografi Anda sendiri atau implementasi algoritma yang Anda publikasikan sendiri.
Pikiran penutup
Jika "server" adalah server web yang menggunakan https, maka Anda harus sudah memiliki semacam kunci aman di server untuk menyimpan kunci pribadi. Ini agak mengejutkan bahwa perusahaan hosting tidak akan membuat penyisihan untuk ini. Mungkin mereka memiliki beberapa petunjuk tentang bagaimana orang lain mengatasi tantangan yang Anda hadapi?
sumber
Jika Anda ingin menjalankan kode Anda di Heroku, Anda harus memberikannya kepada mereka - Anda tidak dapat merahasiakannya dari penyedia hosting Anda.
Sejauh repositori public git pergi, jika proyek Anda adalah open source tetapi Anda tidak ingin berbagi rincian hosting, Anda perlu mempertahankan garpu pribadi dari proyek Anda untuk keperluan penyebaran.
sumber
Anda tidak boleh menyembunyikan bagian dari kode. Keamanan sistem Anda tidak harus bergantung pada kerahasiaan kode; yang dikenal sebagai "keamanan melalui ketidakjelasan", yang disukai oleh para ahli keamanan karena bekerja sangat buruk.
Sebaliknya, kata sandi, kunci crypto, dll. Harus disimpan terpisah dari kode. Simpan di file konfigurasi atau nilai konfigurasi terpisah yang dibaca oleh kode. Anda tidak perlu menyimpannya di git.
Penting: Jangan pernah menyimpan kode kunci kriptografis, kata sandi, atau rahasia lain dalam kode sumber Anda! Itu praktik yang sangat buruk.
Lihat juga:
Bagaimana proyek open source menangani artefak yang aman?
Kata sandi dalam file .php
Standar untuk mengenkripsi kata sandi dalam file konfigurasi?
Open Source dan bagaimana cara kerjanya untuk proyek yang aman?
Cara melindungi informasi akun ftp dalam kode sumber program
Apakah ini cara aman untuk mendeklarasikan parameter DB di htaccess daripada di file PHP?
Pasang: IT Security.SE adalah tempat yang tepat untuk mengajukan pertanyaan tentang keamanan!
sumber