🧭 দক্ষতা যাচাই ও প্রতিরক্ষামূলক takeaway
Skill checkpoint: Local transaction demo-তে race-condition risk ও inconsistency শনাক্ত করো।
Defense checkpoint: Atomic update, idempotency key ও concurrency-safe invariant প্রয়োগ করো.
Lab scope: শুধু নিজের lab, synthetic data বা লিখিত অনুমতিপ্রাপ্ত target-এ অনুশীলন করো। Real credential, token বা customer data ব্যবহার কোরো না।
Portfolio proof: finding, impact, fix ও retest নিয়ে ৫-লাইনের redacted note রাখো।
⚡ গল্প ১: এটিএম বুথ ও দুই বন্ধুর যুগপৎ টানাহেঁচড়া
ভাবো তোমার ব্যাংক একাউন্টে ঠিক ₹১,০০০ টাকা জমা আছে। তুমি আর তোমার ভাই শহরের দুটো আলাদা প্রান্তে দুটি এটিএম বুথে ঢুকলে। ঠিক কাঁটায় কাঁটায় দুপুর ১২:০০:০০.০০০ সেকেন্ডে তোমরা দুজন একই সাথে ₹১,০০০ টাকা তোলার বোতাম চাপলে!
যদি ব্যাংকের ডেটাবেস সিস্টেম একটুও আলসেমি করে এবং একাউন্ট ব্যালেন্স আপডেট করতে কয়েক মিলি-সেকেন্ড দেরি করে, তবে উভয় এটিএম বুথ থেকেই ₹১,০০০ করে মোট ₹২,০০০ টাকা বেরিয়ে আসবে! অথচ একাউন্টে ছিল মাত্র ১,০০০ টাকা!
এই অদ্ভুত ও মারাত্মক ফাঁকফোকরটিকেই হ্যাকিংয়ের ভাষায় বলা হয় Race Condition (Time-of-Check to Time-of-Use বা TOCTOU)!
💸 গল্প ২: কুপন কোড ও গিফট কার্ড ডাবল রিডিম
অনলাইন শপিং সাইটে সবচেয়ে বড় রেস কন্ডিশন পাওয়া যায় কুপন কোড ও রেফারেল বোনাস রিডিমে।
সাধারণ ফ্লো:
১. সার্ভার দেখে: কুপন কি ব্যবহৃত হয়েছে? (Check: না, এখনো হয়নি)
২. সার্ভার ডিসকাউন্ট দেয়: ₹৫০০ টাকা ছাড়!
৩. সার্ভার কুপনটিকে মার্ক করে: 'Used'!
ধূর্ত হ্যাকাররা ১ নম্বর ও ৩ নম্বর ধাপের মাঝখানের ন্যানো-সেকেন্ডের ব্যবধানে Python aiohttp দিয়ে একসাথে ৫০টি রিকোয়েস্ট পাঠিয়ে দেয়! ফলে সার্ভার সবগুলো রিকোয়েস্টকেই 'Valid' মনে করে ৫০ বার ₹৫০০ টাকা করে মোট ₹২৫,০০০ ছাড় দিয়ে দেয়! 🎯
🛡️ গল্প ৩: সার্ভার কীভাবে নিজেকে বাঁচাবে? (Mutex ও Locking)
রেস কন্ডিশন আটকানোর উপায় হলো ডেটাবেস Row-level Lock (`SELECT ... FOR UPDATE`) ব্যবহার করা অথবা রিকোয়েস্টের সাথে একটি অনন্য Idempotency Key (UUID) বাধ্যতামূলক করা। প্রথম রিকোয়েস্ট ছাড়া বাকি সব ডুপ্লিকেট রিকোয়েস্ট সার্ভার রিজেক্ট করে দেবে!
💡 রেস কন্ডিশন চেনার উপায়
যেখানেই ব্যালেন্স কাটা, টিকিট বুকিং, ডিসকাউন্ট কুপন, কয়েন ট্রান্সফার বা ভোট দেওয়ার অপশন আছে — সেখানেই সমান্তরাল থ্রেডে রিকোয়েস্ট পাঠিয়ে রেস উইন্ডো টেস্ট করবে!