Depolardaki parolalarla uğraşmak, sorunun ne olduğuna bağlı olarak farklı şekillerde ele alınacaktır.
1. Yapma.
Ve yapmaktan kaçınmanın yolları bazı yanıtlarda ele alınmıştır - .gitignore, config.example, vb.
veya 2. Havuzu yalnızca yetkili kişiler için erişilebilir hale getirin
Yani şifreyi bilen insanlar. chmod
ve kullanıcı grupları akla geliyor; ayrıca depolarınızı veya sunucularınızı dışarıda barındırıyorsanız Github veya AWS çalışanlarının bir şeyler görmesine izin verilmeli mi?
veya 3. Hassas verileri şifreleyin (bu cevabın amacı)
Hassas bilgiler içeren (şifreler gibi) yapılandırma dosyalarınızı herkese açık bir yerde saklamak istiyorsanız, şifrelenmesi gerekir. Depodan kurtarıldığında dosyaların şifresi çözülebilir, hatta doğrudan şifrelenmiş formlarından kullanılabilir.
Şifreli yapılandırma verilerinin kullanımına ilişkin örnek bir javascript çözümü aşağıda gösterilmiştir.
const fs = require('fs');
const NodeRSA = require('node-rsa');
let privatekey = new NodeRSA();
privatekey.importKey(fs.readFileSync('private.key', 'utf8'));
const config = privatekey.decrypt(fs.readFileSync('config.RSA', 'utf8'), 'json');
console.log('decrypted: ', config);
Böylece, sadece birkaç satır Javascript yazarak şifrelenmiş bir yapılandırma dosyasını kurtarabilirsiniz.
Bir dosyayı config.RSA
git deposuna koymanın, dosyayı ikili bir dosya haline getireceğini ve bu nedenle Git gibi bir şeyin faydalarının çoğunu kaybedeceğini unutmayın, örneğin değişiklikleri kiraz alma yeteneği.
Bunun çözümü, anahtar / değer çiftlerini veya belki de sadece değerleri şifrelemek olabilir. Örneğin hassas bilgiler için ayrı bir dosyanız varsa tüm değerleri şifreleyebilir veya bir dosyadaki tüm değerlere sahipseniz yalnızca hassas değerleri şifreleyebilirsiniz. (aşağıya bakınız)
Yukarıdaki örneğim, onunla bir test yapmak isteyen veya bazı RSA anahtarlarının ve şifreli bir yapılandırma dosyasının varlığını kabul ettiği için başlamak için bir örnek olarak işe yaramaz config.RSA
.
RSA anahtarları ve oynatılacak bir yapılandırma dosyası oluşturmak için ek kod satırları eklendi.
const fs = require('fs');
const NodeRSA = require('node-rsa');
/////////////////////////////
// Generate some keys for testing
/////////////////////////////
const examplekey = new NodeRSA({b: 2048});
fs.writeFileSync('private.key', examplekey.exportKey('pkcs8-private'));
fs.writeFileSync('public.key', examplekey.exportKey('pkcs8-public'));
/////////////////////////////
// Do this on the Machine creating the config file
/////////////////////////////
const configToStore = {Goodbye: 'Cruel world'};
let publickey = new NodeRSA();
publickey.importKey(fs.readFileSync('public.key', 'utf8'));
fs.writeFileSync('config.RSA', publickey.encrypt(configToStore, 'base64'), 'utf8');
/////////////////////////////
// Do this on the Machine consuming the config file
/////////////////////////////
let privatekey = new NodeRSA();
privatekey.importKey(fs.readFileSync('private.key', 'utf8'));
const config = privatekey.decrypt(fs.readFileSync('config.RSA', 'utf8'), 'json');
console.log('decrypted: ', config);
Yalnızca değerleri şifreleme
fs.writeFileSync('config.RSA', JSON.stringify(config,null,2), 'utf8');
Böyle bir şey kullanarak şifrelenmiş değerlere sahip bir yapılandırma dosyasının şifresini çözebilirsiniz.
const savedconfig = JSON.parse(fs.readFileSync('config.RSA', 'utf8'));
let config = {...savedconfig};
Object.keys(savedconfig).forEach(key => {
config[key] = privatekey.decrypt(savedconfig[key], 'utf8');
});
Her yapılandırma öğesi ayrı bir satırda (ör. Hello
Ve Goodbye
üstü), Git bir dosyada neler olup bittiğini daha iyi tanır ve bilgi öğelerindeki değişiklikleri tam dosyalar yerine farklılıklar olarak depolar. Git ayrıca birleştirme ve kiraz seçimlerini vb. Daha iyi yönetebilecektir.
Bununla birlikte, denetimin ne kadar çok sürümünü hassas bilgi olarak değiştirirseniz, GÜVENLİ BİR DEPOLAMA çözümüne (2) ve ENCRYPTED INFO (3) çözümünden o kadar uzaklaşırsınız.