𝗬𝗼𝘂𝗿 𝗦𝗮𝗮𝗦 𝗜𝘀 𝗟𝗲𝗮𝗸𝗶𝗻𝗴 𝗠𝗼𝗻𝗲𝘆
বেশিরভাগ ডেভেলপার তাদের SaaS রিলিজ করেவிட்டு এগিয়ে যান। তারা নিরাপত্তাকে পরে করার মতো একটি কাজ হিসেবে বিবেচনা করেন। তারা প্রকৃত ব্যবহারকারী বা প্রকৃত অর্থ আসার জন্য অপেক্ষা করেন।
প্রকৃত আর্থিক ক্ষতি প্রায়শই সাধারণ ভুলের কারণে হয়। এগুলো কোনো জটিল হ্যাকিং নয়। এগুলো আপনার কোডের লজিক্যাল ত্রুটি (logic errors)।
টাকা হারানোর চারটি সাধারণ উপায় এখানে দেওয়া হলো:
- ক্রেডিট সিস্টেমে Race Conditions আপনি ব্যবহারকারীর ব্যালেন্স পড়েন, সেটি যাচাই করেন এবং তারপর নতুন ব্যালেন্সটি লিখেন। যদি একজন ব্যবহারকারী একই সময়ে দুটি রিকোয়েস্ট পাঠান, তবে প্রথমটি ডাটাবেস আপডেট করার আগেই উভয় রিকোয়েস্ট যাচাইকরণে পাস করে যেতে পারে। এর ফলে আপনি একটির দামে দুটি সার্ভিস দিয়ে ফেলেন।
সমাধান: Atomic database operations ব্যবহার করুন। রিড (read) এবং রাইট (write) করার পরিবর্তে, ব্যবহারকারীর পর্যাপ্ত ক্রেডিট আছে কি না তা যাচাই করে ব্যালেন্স আপডেট করার জন্য একটি মাত্র কমান্ড ব্যবহার করুন।
- আইডেন্টিটির জন্য ক্লায়েন্ট ইনপুটকে বিশ্বাস করা আপনি চেকআউটের সময় রিকোয়েস্ট বডি (request body) থেকে ইমেল ঠিকানা গ্রহণ করেন। একজন অথেন্টিকেটেড (authenticated) ব্যবহারকারী সেই ইমেলটি অন্য কারো ঠিকানায় পরিবর্তন করতে পারেন। এটি তাদের ভুল অ্যাকাউন্টের জন্য বিলিং সেশন তৈরি করতে বা আপনার সিস্টেম পরীক্ষা করতে সাহায্য করে।
সমাধান: রিকোয়েস্ট বডি থেকে আইডেন্টিটি বা পরিচয় কখনোই বিশ্বাস করবেন না। আপনার সার্ভারে ভেরিফাইড সেশন টোকেন (verified session token) থেকে ইমেলটি সংগ্রহ করুন।
- ত্রুটিপূর্ণ বার্ষিক বিলিং লজিক (Broken Annual Billing Logic) অনেক ডেভেলপার Stripe পেমেন্ট ইভেন্টগুলো অনুসরণ করে ব্যবহারকারীর ক্রেডিট রিসেট করেন। এটি মাসিক প্ল্যানের জন্য কাজ করে, কিন্তু বার্ষিক প্ল্যানের ক্ষেত্রে ব্যর্থ হয়। Stripe বছরে মাত্র একটি ইভেন্ট পাঠায়। আপনার ব্যবহারকারীরা প্রথম দিনেই ক্রেডিট পেয়ে যান এবং পরবর্তী এগারো মাস কিছুই পান না।
সমাধান: ক্রেডিট রিসেট করার প্রক্রিয়াকে বিলিং ইভেন্ট থেকে আলাদা করুন। একটি নির্দিষ্ট রিসেট ডেটের ওপর ভিত্তি করে কোন ব্যবহারকারীর ক্রেডিট রিসেট করা প্রয়োজন তা পরীক্ষা করতে একটি ডেইলি ক্রন জব (daily cron job) ব্যবহার করুন।
- অনিরাপদ টোকেন স্টোরেজ
আপনি পাসওয়ার্ড রিসেট টোকেনগুলো
localStorage-এ সংরক্ষণ করেন। আপনার পেজের যেকোনো স্ক্রিপ্টlocalStorageঅ্যাক্সেস করতে পারে। এর মধ্যে ব্রাউজার এক্সটেনশন এবং থার্ড-পার্টি অ্যানালিটিক্সও অন্তর্ভুক্ত।
সমাধান: রিকভারি টোকেন হ্যান্ডেল করতে আপনার authentication SDK ব্যবহার করুন। লাইব্রেরিটিকে টোকেনটি স্বয়ংক্রিয়ভাবে প্রসেস করতে দিন যাতে এটি লোকাল স্টোরেজে সংরক্ষণ করার প্রয়োজন না হয়।
সমস্যাটি সব সময় একই: আপনি ক্লায়েন্টকে বিশ্বাস করেন। আপনি বিশ্বাস করেন যে রিকোয়েস্টগুলো একটির পর একটি আসবে। আপনি বিশ্বাস করেন যে বিলিং ইভেন্টগুলো প্রতিটি ক্ষেত্র কভার করবে।
এই সমস্যাগুলো সমাধান করতে একদিনের কম সময় লাগে। টাকা হারানোর আগেই আপনার কোড অডিট করুন।
উৎস: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38
