مشروع الـ SaaS الخاص بك يستنزف الأموال
معظم المطورين يطلقون مشاريع الـ SaaS الخاصة بهم ثم ينتقلون إلى شيء آخر. إنهم يتعاملون مع الأمن كمهمة مؤجلة، وينتظرون وصول مستخدمين حقيقيين أو أموال حقيقية.
غالبًا ما تنجم الخسائر المالية الحقيقية عن أخطاء بسيطة. ليست هذه عمليات اختراق معقدة، بل هي أخطاء منطقية في الكود الخاص بك.
إليك أربع طرق شائعة تفقد من خلالها الأموال:
- حالات التسابق (Race Conditions) في أنظمة الرصيد تقوم بقراءة رصيد المستخدم، والتحقق منه، ثم كتابة الرصيد الجديد. إذا أرسل المستخدم طلبين في نفس الوقت، فقد يجتاز كلا الطلبين عملية التحقق قبل أن يقوم الطلب الأول بتحديث قاعدة البيانات. وبذلك، ستقدم خدمتين بسعر خدمة واحدة.
الحل: استخدم عمليات قاعدة بيانات ذرية (atomic operations). بدلاً من القراءة ثم الكتابة، استخدم أمراً واحداً لتحديث الرصيد فقط إذا كان لدى المستخدم رصيد كافٍ.
- الوثوق بمدخلات العميل لتحديد الهوية تقوم بأخذ عنوان البريد الإلكتروني من جسم الطلب (request body) أثناء عملية الدفع. يمكن للمستخدم المصرح له تغيير هذا البريد إلى عنوان شخص آخر، مما يسمح له بإنشاء جلسات فوترة لحسابات خاطئة أو استكشاف نظامك.
الحل: لا تثق أبداً بالهوية المستمدة من جسم الطلب. استخرج البريد الإلكتروني من رمز الجلسة (session token) الذي تم التحقق منه على خادمك.
- خلل في منطق الفوترة السنوية يقوم العديد من المطورين بإعادة تعيين أرصدة المستخدمين من خلال الاستماع إلى أحداث الدفع في Stripe. هذا يعمل مع الخطط الشهرية، لكنه يفشل مع الخطط السنوية. يرسل Stripe حدثاً واحداً فقط في السنة، مما يعني أن مستخدميك سيحصلون على أرصدة في اليوم الأول ولن يحصلوا على شيء خلال الأشهر الأحد عشر التالية.
الحل: افصل عملية إعادة تعيين الرصيد عن أحداث الفوترة. استخدم وظيفة cron يومية للتحقق من المستخدمين الذين يحتاجون إلى إعادة تعيين بناءً على تاريخ إعادة التعيين.
- تخزين غير آمن للرموز (Tokens) تقوم بتخزين رموز إعادة تعيين كلمة المرور في localStorage. يمكن لأي نص برمجي (script) في صفحتك الوصول إلى localStorage، بما في ذلك إضافات المتصفح وأدوات التحليل التابعة لجهات خارجية.
الحل: استخدم SDK المصادقة الخاص بك للتعامل مع رموز الاسترداد. اترك المكتبة تعالج الرمز تلقائياً دون تخزينه في التخزين المحلي (local storage).
المشكلة هي نفسها دائماً: أنت تثق في العميل. تثق في أن الطلبات تصل واحداً تلو الآخر. وتثق في أن أحداث الفوترة تغطي كل الحالات.
إصلاح هذه المشكلات يستغرق أقل من يوم واحد. راجع الكود الخاص بك قبل أن تخسر الأموال.
المصدر: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38
