আপনার সঠিক সমস্যাটি কী তা নির্ভর করে স্টোরগুলিতে পাসওয়ার্ডগুলি ব্যবহার করা বিভিন্নভাবে পরিচালনা করা হবে।
1. এটি করবেন না।
এবং করা এড়ানোর উপায়গুলি কয়েকটি জবাবগুলিতে itাকা থাকে - .gitignore, config.example, ইত্যাদি
বা 2. কেবল অনুমোদিত ব্যক্তিদের কাছেই সংগ্রহস্থলটিকে অ্যাক্সেসযোগ্য করে তুলুন
অর্থাত্ পাসওয়ার্ড জানার অনুমতিপ্রাপ্ত লোক। chmod
এবং ব্যবহারকারী গোষ্ঠী মাথায় আসে; এছাড়াও যদি আপনি আপনার ভান্ডারগুলি বা সার্ভারগুলি বাহ্যিকভাবে হোস্ট করেন তবে গিথুব বা এডাব্লুএস কর্মীদের কি জিনিস দেখার অনুমতি দেওয়া উচিত?
বা ৩. সংবেদনশীল ডেটা এনক্রিপ্ট করুন (এই উত্তরটির উদ্দেশ্য)
আপনি যদি কোনও কনফিগারেশন ফাইলগুলি সংবেদনশীল তথ্য (যেমন পাসওয়ার্ড সহ) কোনও সর্বজনীন স্থানে সংরক্ষণ করতে চান তবে এটি এনক্রিপ্ট করা দরকার। সংগ্রহস্থল থেকে পুনরুদ্ধার করার সময় ফাইলগুলি ডিক্রিপ্ট করা যেতে পারে, বা এমনকি তাদের এনক্রিপ্ট করা ফর্ম থেকে সরাসরি ব্যবহার করা যেতে পারে।
এনক্রিপ্ট করা কনফিগারেশন ডেটা ব্যবহারের জাভাস্ক্রিপ্ট সমাধানের একটি উদাহরণ নীচে দেখানো হয়েছে।
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);
সুতরাং আপনি জাভাস্ক্রিপ্টের কয়েকটি লাইনে একটি এনক্রিপ্ট করা কনফিগারেশন ফাইল পুনরুদ্ধার করতে পারেন।
নোট করুন যে config.RSA
একটি গিট সংগ্রহস্থলের মধ্যে একটি ফাইল স্থাপন করা কার্যকরভাবে এটি একটি বাইনারি ফাইল তৈরি করে এবং তাই এটি গিটের মতো কোনও কিছুর অনেক সুবিধা হারাতে পারে, যেমন চেরি পরিবর্তন করে এটির ক্ষমতা।
এর সমাধান হতে পারে মূল মান জোড়া বা সম্ভবত কেবল মানগুলি এনক্রিপ্ট করা। আপনি সমস্ত মান এনক্রিপ্ট করতে পারেন, উদাহরণস্বরূপ যদি আপনার সংবেদনশীল তথ্যের জন্য পৃথক ফাইল থাকে বা আপনার যদি একটি ফাইলে সমস্ত মান থাকে তবে সংবেদনশীল মানগুলি এনক্রিপ্ট করতে পারেন। (নিচে দেখ)
আমার উদাহরণটি একটু এটির সাথে একটি পরীক্ষা করুন, অথবা একটি উদাহরণ হিসাবে এটি কিছু আরএসএ কী ও একটি এনক্রিপ্ট করা কনফিগ ফাইলের অস্তিত্ব অনুমান থেকে শুরু করতে যেমন অনুপস্থিত কারো কাছে অনর্থক config.RSA
।
সুতরাং এখানে আরএসএ কীগুলি তৈরি করতে কোডের কয়েকটি অতিরিক্ত লাইন যুক্ত হয়েছে এবং এতে খেলতে একটি কনফিগারেশন ফাইল রয়েছে।
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);
শুধুমাত্র এনক্রিপ্ট মান
fs.writeFileSync('config.RSA', JSON.stringify(config,null,2), 'utf8');
আপনি এ জাতীয় কিছু ব্যবহার করে এনক্রিপ্ট করা মান সহ একটি কনফিগার ফাইল ডিক্রিপ্ট করতে পারেন।
const savedconfig = JSON.parse(fs.readFileSync('config.RSA', 'utf8'));
let config = {...savedconfig};
Object.keys(savedconfig).forEach(key => {
config[key] = privatekey.decrypt(savedconfig[key], 'utf8');
});
পৃথক লাইনে প্রতিটি কনফিগারেশন আইটেমের সাথে (যেমন Hello
এবং Goodbye
উপরে), গিট কোনও ফাইলের মধ্যে কী চলছে তা আরও ভালভাবে সনাক্ত করবে এবং সম্পূর্ণ ফাইলের পরিবর্তে তথ্যের আইটেমগুলিতে পরিবর্তনগুলি সংরক্ষণ করবে। গিটটি মার্জ এবং চেরি পিকস ইত্যাদি আরও ভালভাবে পরিচালনা করতে সক্ষম হবে।
তবে সংবেদনশীল তথ্যে আপনি যত পরিবর্তন নিয়ন্ত্রণ করতে চান তত বেশি আপনি নিরাপদ রিপোজিটরি সমাধান (২) এর দিকে এবং এনক্রিপটেড ইনফো (3) সমাধান থেকে দূরে সরে যাচ্ছেন।