तुमचा SaaS पैशांची गळती करत आहे
बहुतेक डेव्हलपर्स त्यांचे SaaS लाँच करतात आणि पुढे निघून जातात. ते सुरक्षेला नंतर करायचे काम समजतात. ते वास्तविक वापरकर्ते किंवा वास्तविक पैसा येण्याची वाट पाहतात.
वास्तविक आर्थिक नुकसान अनेकदा साध्या चुकांमुळे होते. हे कोणतेही जटिल हॅक्स नसतात. ते तुमच्या कोडमधील लॉजिक एरर्स (logic errors) असतात.
पैसे गमावण्याचे चार सामान्य मार्ग खालीलप्रमाणे आहेत:
- क्रेडिट सिस्टममधील Race Conditions तुम्ही वापरकर्त्याची शिल्लक (balance) वाचता, ती तपासता आणि नंतर नवीन शिल्लक लिहिता. जर वापरकर्त्याने एकाच वेळी दोन विनंत्या (requests) पाठवल्या, तर पहिली विनंती डेटाबेस अपडेट करण्यापूर्वी दोन्ही विनंत्या तपासणीत उत्तीर्ण होऊ शकतात. तुम्ही एकाच्या किमतीत दोन सेवा देत असता.
उपाय: atomic database operations वापरा. वाचण्याऐवजी आणि नंतर लिहिण्याऐवजी, वापरकर्त्याकडे पुरेसे क्रेडिट असल्यास शिल्लक अपडेट करण्यासाठी एकाच कमांडचा वापर करा.
- ओळखीसाठी (Identity) क्लायंट इनपुटवर विश्वास ठेवणे तुम्ही चेकआउट दरम्यान request body मधून ईमेल पत्ता घेता. एक ऑथेंटिकेटेड (authenticated) वापरकर्ता तो ईमेल बदलून दुसऱ्याचा पत्ता टाकू शकतो. यामुळे त्यांना चुकीच्या खात्यांसाठी बिलिंग सेशन्स तयार करता येतात किंवा तुमच्या सिस्टमची चाचणी (probe) घेता येते.
उपाय: request body मधून मिळणाऱ्या ओळखीवर कधीही विश्वास ठेवू नका. तुमच्या सर्व्हरवरील व्हेरिफाईड (verified) session token मधून ईमेल काढा.
- बिघडलेले वार्षिक बिलिंग लॉजिक (Broken Annual Billing Logic) अनेक डेव्हलपर्स Stripe पेमेंट इव्हेंट्सवर लक्ष ठेवून वापरकर्त्याचे क्रेडिट रिसेट करतात. हे मासिक प्लॅन्ससाठी काम करते, पण वार्षिक प्लॅन्ससाठी अपयशी ठरते. Stripe वर्षातून एकदाच इव्हेंट पाठवते. तुमच्या वापरकर्त्यांना पहिल्या दिवशी क्रेडिट मिळते आणि पुढचे अकरा महिने काहीच मिळत नाही.
उपाय: क्रेडिट रिसेट आणि बिलिंग इव्हेंट्स एकमेकांपासून वेगळे करा (Decouple). रिसेट तारखेच्या आधारावर कोणत्या वापरकर्त्यांना रिसेटची गरज आहे हे तपासण्यासाठी डेली cron job वापरा.
- असुरक्षित टोकन स्टोरेज (Insecure Token Storage) तुम्ही पासवर्ड रिसेट टोकन्स localStorage मध्ये साठवता. तुमच्या पेजवरील कोणताही स्क्रिप्ट localStorage ला ॲक्सेस करू शकतो. यामध्ये ब्राउझर एक्स्टेंशन्स आणि थर्ड-पार्टी ॲनालिटिक्सचा समावेश आहे.
उपाय: रिकव्हरी टोकन्स हाताळण्यासाठी तुमच्या authentication SDK चा वापर करा. लायब्ररीला टोकन local storage मध्ये साठवण्याऐवजी ते आपोआप प्रोसेस करू द्या.
समस्या नेहमी तीच असते: तुम्ही क्लायंटवर विश्वास ठेवता. विनंत्या (requests) एकामागून एक येतील असा तुमचा विश्वास असतो. बिलिंग इव्हेंट्स सर्व परिस्थिती कव्हर करतील असा तुमचा विश्वास असतो.
या समस्या सोडवण्यासाठी एक दिवसापेक्षा कमी वेळ लागतो. पैसे गमावण्यापूर्वी तुमच्या कोडचे ऑडिट करा.
स्रोत: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38
