কেন গিট লগ “ডিলিট” করার পরেও গোপনীয় তথ্য ফাঁস করে দেয়
ফাইল থেকে একটি লাইন মুছে ফেলা এবং commitপরিবর্তনটি করলেও আপনার রিপো থেকে সংবেদনশীল ডেটা আসলে মুছে যায় না। যদি সেই সিক্রেট, একটি এপিআই কী, ক্রেডেনশিয়াল বা টোকেন কখনও... commitটেড, এটি আপনার গিট হিস্ট্রিতে থাকে। যে কেউ চালাচ্ছে git log -p, গিট শোঅথবা অতীতের পার্থক্যগুলো পরিদর্শন করা commits এখনও এটি পুনরুদ্ধার করতে পারে।
এমনকি যদি আপনি কোনো ফাইল ওভাররাইট করেন বা মান প্রতিস্থাপন করেন, গিট লগ প্রতিটি পরিবর্তনের সম্পূর্ণ বংশধারা সংরক্ষণ করে। এটি ইচ্ছাকৃতভাবেই করা হয়েছে। গিট-এর সম্পূর্ণ মডেলটি অপরিবর্তনীয়তার উপর ভিত্তি করে নির্মিত। commit ইতিহাস এবং বিতরণ করা অনুলিপি। তাই আপনি যদি স্পষ্টভাবে ইতিহাস পুনর্লিখন না করেন, আপনার গোপনীয়তাগুলো সেখানেই থেকে যায়। এখানে একটি বাস্তব উদাহরণ দেওয়া হলো:
⚠️ এটি একটি শিক্ষামূলক উদাহরণ, প্রোডাকশনে চালাবেন না।
অনেক দেরি হয়ে গেছে। গিট লগ এখনও শুরুতে সেই চাবিটি দেখাচ্ছে commit.
গিট স্ট্যাশ এবং গিট রিবেস সম্পর্কিত ভুল ধারণা
অনেক ডেভেলপার ধরে নেন গিট স্ট্যাশ গোপনীয়তা লুকাতে বা পরিষ্কার করতে সাহায্য করে। এটা সত্যি নয়। গিট স্ট্যাশ শুধুমাত্র তাক কর্ম ডিরেক্টরি সাময়িকভাবে পরিবর্তন হয়; এটি কখনো স্পর্শ করে না commit ইতিহাস। যদি কোনো গোপনীয়তা কখনো ছিল commitটেড, পরে পরিবর্তনগুলো স্ট্যাশ করলে তা পরিষ্কার হয় না।
কি সম্পর্কে গিট রিবেসযদিও এটি ইতিহাসকে নতুন করে লিখতে পারে, তবে তা অবশ্যই পূর্বপ্রস্তুতিমূলক হতে হবে।cisএলি। শুধু দৌড়াচ্ছি। git rebase -i এবং পুনর্বিন্যাস বা সংকুচিত করা commitআপনি স্পষ্টভাবে সম্পাদনা বা মুছে না ফেললে s গোপনীয় তথ্য মুছে ফেলে না। এবং যদি মূলটির একটিও ক্লোন বা ফর্ক বিদ্যমান থাকে। commitএস, তোমার গোপন রহস্যটি বেঁচে থাকবে।
এর চেয়েও খারাপ ব্যাপার হলো, সঠিকভাবে ফোর্স-পুশ না করে অথবা সহযোগীদের সাথে পুনরায় সমন্বয় না করে রিবেস করলে, মার্জের মাধ্যমে ফাঁস হওয়া ক্রেডেনশিয়ালগুলো আবার ফিরে আসতে পারে।
⚠️ এটি একটি শিক্ষামূলক উদাহরণ, বাস্তব পরিবেশে ব্যবহার করবেন না।
⚠️ এটি একটি শিক্ষামূলক উদাহরণ, প্রোডাকশন রিপোজিটরিতে চালাবেন না।
সম্পাদনা করুন commit গোপনীয় তথ্যটি হাতে আছে, কিন্তু তা সরাতে ভুলে গেছেন। আপনার গিট লগ হতে পারে দেখুন আরও পরিষ্কার, কিন্তু সংবেদনশীল বিষয়বস্তু এখনও পুনরুদ্ধারযোগ্য।
গিট ইতিহাসে ভুলে যাওয়া ক্রেডেনশিয়াল থেকে বাস্তব ঝুঁকি
এটা কোনো তাত্ত্বিক বিষয় নয়। আক্রমণকারীরা পাবলিক ও প্রাইভেট রিপোজিটরিগুলোতে লুকিয়ে থাকা গোপনীয় তথ্যের সন্ধানে সক্রিয়ভাবে স্ক্যান করে। commit ইতিহাস। গিটহাব ফর্ক, মিরর রিপো এবং ক্যাশ করা CI/CD pipelineসবগুলোই সেই বিস্মৃত স্মারকচিহ্নগুলোকে ধারণ করতে পারে।
- পুরানো একটি থেকে ফাঁস হওয়া এপিআই কী গিট লগ এর ফলে একটি স্টার্টআপের ক্লাউড বিলিং বাবদ হাজার হাজার ডলার খরচ হয়েছে।
- OAuth টোকেন commitব্যবহারকারীদের অ্যাকাউন্ট হাইজ্যাক করার জন্য প্রথমে টেড এবং পরে “ডিলিট” করে দেওয়া মেসেজ ব্যবহার করা হতো।
- ওপেন সোর্স প্রজেক্টের ফর্কগুলোর গভীরে চাপা পড়া গোপনীয় তথ্য বড় ধরনের নিরাপত্তা বিপর্যয়ের সূত্রপাত ঘটিয়েছে।
এই সমস্যাগুলো বাড়তে থাকে CI/CDপ্রতিটি জব যা একটি রিপো ক্লোন করে তা চলে গিট লগ অভ্যন্তরীণভাবে, এবং প্রতিটি বিল্ড আর্টিফ্যাক্টে ফাঁস হওয়া গোপন তথ্যের চিহ্ন থাকার সম্ভাবনা থাকে।
git filter-repo ব্যবহার করে সংবেদনশীল ডেটা পরিষ্কার করা
ক্ষতি হয়ে গেলে, তা পরিষ্কার করার সবচেয়ে নির্ভরযোগ্য উপায় হলো git ফিল্টার-রেপো, অসদৃশ গিট রিবেসযা পুনর্লিখন করে স্বতন্ত্র commits, git ফিল্টার-রেপো পুরোটা নতুন করে লিখতে পারে commit ফাইল পাথ, প্যাটার্ন বা বিষয়বস্তুর উপর ভিত্তি করে ইতিহাস।
উদাহরণ: এর সমস্ত ঘটনা মুছে ফেলতে config.json যেগুলোতে গোপনীয় তথ্য থাকতে পারে:
⚠️ শিক্ষামূলক উদাহরণ, প্রোডাকশনে ব্যবহার করার আগে একটি টেস্ট রিপোতে যাচাই করে নিন।
অথবা সব অপসারণ করতে commitযেগুলিতে একটি নির্দিষ্ট স্ট্রিং অন্তর্ভুক্ত থাকে (যেমন, AWS_SECRET_ACCESS_KEY):
⚠️ শিক্ষামূলক উদাহরণ, প্রোডাকশনে ব্যবহার করার আগে একটি টেস্ট রিপোতে যাচাই করে নিন।
সতর্ক থাকুন: এটি পুনর্লিখন করবে commit হ্যাশ। আপনাকে ফোর্স-পুশ করতে হবে এবং সকল সহযোগীকে জানাতে হবে। এর সাথে যুক্ত যেকোনো অটোমেশন বা ডিপ্লয়মেন্ট কী। commit হ্যাশগুলো ভেঙে যাবে।
এছাড়াও, সরঞ্জাম যেমন বিএফজি রিপো-ক্লিনার এগুলো একই ধরনের সক্ষমতা প্রদান করে, কিন্তু কম নমনীয় এবং জটিল ক্ষেত্রে এখন সেকেলে বলে বিবেচিত হয়।
গিট-এ পৌঁছানোর আগেই গোপন তথ্য ফাঁস প্রতিরোধ করা
প্রতিকারের চেয়ে প্রতিরোধই উত্তম। গোপনীয়তা ফাঁস হওয়া থেকে বাঁচানোর উপায় এখানে দেওয়া হলো। গিট লগ:
1. Pre-commit Hooks
মত সরঞ্জাম ব্যবহার করুন pre-commit, গিটলিকস, বা কবচ গোপনীয়তার জন্য স্ক্যান করার আগে commits:
2. CI/CD Pipeline প্রয়োগ
সম্পূর্ণ গোপন সনাক্তকরণ আপনার CI জবগুলিতে এটি অন্তর্ভুক্ত করুন। গোপনীয় তথ্য পাওয়া গেলে বিল্ড ব্যর্থ করে দিন। এটিকে একটি নীতি হিসেবে গ্রহণ করুন।
৫. গোপনীয় তথ্য ব্যবস্থাপনা
কখনোই ক্রেডেনশিয়াল হার্ডকোড করবেন না। প্রথম দিন থেকেই এনভায়রনমেন্ট ভেরিয়েবল, ভল্ট বা সিক্রেট ম্যানেজার ব্যবহার করুন।
৪. নিরীক্ষা নির্ভরশীলতা
তৃতীয় পক্ষের প্যাকেজ অন্ধভাবে বিশ্বাস করবেন না। গোপনীয়তা ফাঁস হতে পারে npm, PyPI, বা Docker লেয়ারের মাধ্যমে।
চূড়ান্ত সমাধান: git filter-repo দিয়ে Secrets মুছে ফেলুন
কোড থেকে গোপনীয় তথ্য মুছে ফেলাই যথেষ্ট নয়। গিট লগ ইতিহাসকে নতুন করে লেখার জন্য ইচ্ছাকৃতভাবে পদক্ষেপ না নিলে এটি সম্পূর্ণ রেকর্ড রাখে না। এর উপর নির্ভর করবেন না। গিট স্ট্যাশ অথবা অর্ধ-পাকা গিট রিবেস চেষ্টা। ব্যবহার করুন git ফিল্টার-রেপো যখন আপনার গভীর পরিচ্ছন্নতার প্রয়োজন হয়, এবং গোপনীয় তথ্য আপনার রিপোজিটরিতে পৌঁছানোর আগেই নীতিমালা ও স্ক্যানিং প্রয়োগ করুন।
সক্রিয়ভাবে গোপন তথ্য শনাক্ত করার জন্য, এই ধরনের টুল ব্যবহার করার কথা বিবেচনা করুন। জাইজেনি আপনার নিরাপদ করতে pipelines, প্রয়োগ করা commit পরিচ্ছন্নতা বজায় রাখুন, এবং বড় ধরনের ক্ষতি প্রকাশ পাওয়ার আগেই তা প্রতিরোধ করুন। গিট কখনো ভোলে না, কিন্তু আপনি নিশ্চিত করতে পারেন যে এটি শুরুতেই আপনার গোপন কথাগুলো মনে রাখবে না।





