آپ کا SaaS پیسے ضائع کر رہا ہے
زیادہ تر ڈویلپرز اپنا SaaS لانچ کرتے ہیں اور آگے بڑھ جاتے ہیں۔ وہ سیکیورٹی کو بعد کے لیے چھوڑ دیتے ہیں۔ وہ حقیقی صارفین یا حقیقی رقم کے آنے کا انتظار کرتے ہیں۔
حقیقی مالی نقصانات اکثر سادہ غلطیوں کی وجہ سے ہوتے ہیں۔ یہ کوئی پیچیدہ ہیکنگ نہیں ہوتی، بلکہ یہ آپ کے کوڈ میں منطقی غلطیاں (logic errors) ہوتی ہیں۔
یہاں پیسے ضائع ہونے کے چار عام طریقے درج ہیں:
- کریڈٹ سسٹم میں ریس کنڈیشنز (Race Conditions) آپ صارف کا بیلنس پڑھتے ہیں، اسے چیک کرتے ہیں، اور پھر نیا بیلنس لکھتے ہیں۔ اگر کوئی صارف ایک ہی وقت میں دو درخواستیں (requests) بھیجتا ہے، تو پہلا ڈیٹا بیس اپ ڈیٹ ہونے سے پہلے دونوں درخواستیں چیک پاس کر سکتی ہیں۔ اس طرح آپ ایک کی قیمت میں دو سروسز فراہم کر دیتے ہیں۔
حل: ایٹامک ڈیٹا بیس آپریشنز (atomic database operations) استعمال کریں۔ پڑھنے اور پھر لکھنے کے بجائے، ایک ہی کمانڈ استعمال کریں تاکہ بیلنس صرف اسی صورت میں اپ ڈیٹ ہو جب صارف کے پاس کافی کریڈٹ موجود ہوں۔
- شناخت کے لیے کلائنٹ ان پٹ پر بھروسہ کرنا آپ چیک آؤٹ کے دوران request body سے ای میل ایڈریس لیتے ہیں۔ ایک تصدیق شدہ (authenticated) صارف اس ای میل کو کسی دوسرے کے ایڈریس سے بدل سکتا ہے۔ اس سے وہ غلط اکاؤنٹس کے لیے بلنگ سیشنز بنا سکتے ہیں یا آپ کے سسٹم کو ٹیسٹ (probe) کر سکتے ہیں۔
حل: request body سے شناخت پر کبھی بھروسہ نہ کریں۔ ای میل کو اپنے سرور پر موجود تصدیق شدہ session token سے حاصل کریں۔
- سالانہ بلنگ لاجک میں خرابی بہت سے ڈویلپرز Stripe پیمنٹ ایونٹس (payment events) کو سن کر صارف کے کریڈٹس ری سیٹ کرتے ہیں۔ یہ ماہانہ پلانز کے لیے تو ٹھیک کام کرتا ہے، لیکن سالانہ پلانز کے لیے ناکام ہو جاتا ہے۔ Stripe سال میں صرف ایک ایونٹ بھیجتا ہے۔ آپ کے صارفین کو پہلے دن کریڈٹس مل جاتے ہیں اور اگلے گیارہ مہینوں تک کچھ نہیں ملتا۔
حل: کریڈٹ ری سیٹ کو بلنگ ایونٹس سے الگ (decouple) کریں۔ ایک روزانہ کا cron job استعمال کریں جو ری سیٹ کی تاریخ کی بنیاد پر چیک کرے کہ کن صارفین کو ری سیٹ کی ضرورت ہے۔
- غیر محفوظ ٹوکن اسٹوریج آپ پاس ورڈ ری سیٹ ٹوکنز کو localStorage میں محفوظ کرتے ہیں۔ آپ کے پیج پر موجود کوئی بھی اسکرپٹ localStorage تک رسائی حاصل کر سکتا ہے۔ اس میں براؤزر ایکسٹینشنز اور تھرڈ پارٹی اینالیٹکس (third-party analytics) بھی شامل ہیں۔
حل: ریکوری ٹوکنز کو ہینڈل کرنے کے لیے اپنے authentication SDK کا استعمال کریں۔ لائبریری کو خودکار طریقے سے ٹوکن پروسیس کرنے دیں تاکہ اسے local storage میں محفوظ کرنے کی ضرورت نہ پڑے۔
مسئلہ ہمیشہ ایک ہی ہوتا ہے: آپ کلائنٹ پر بھروسہ کرتے ہیں۔ آپ یہ سمجھتے ہیں کہ درخواستیں ایک ایک کر کے آئیں گی۔ آپ یہ سمجھتے ہیں کہ بلنگ ایونٹس ہر صورتحال کا احاطہ کر لیتے ہیں۔
ان مسائل کو حل کرنے میں ایک دن سے بھی کم وقت لگتا ہے۔ پیسے ضائع کرنے سے پہلے اپنے کوڈ کا آڈٹ کریں۔
ماخذ: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38
