𝗬𝗼𝘂𝗿 𝗦𝗮𝗮𝗦 𝗜𝘀 𝗟𝗲𝗮𝗸𝗶𝗻𝗴 𝗠𝗼𝗻𝗲𝘆

മിക്ക ഡെവലപ്പർമാരും തങ്ങളുടെ SaaS പുറത്തിറക്കി അടുത്ത കാര്യങ്ങളിലേക്ക് കടക്കുന്നു. അവർ സുരക്ഷയെ പിന്നീട് ചെയ്യേണ്ട ഒരു കാര്യമായിട്ടാണ് കാണുന്നത്. യഥാർത്ഥ ഉപഭോക്താക്കളോ വരുമാനമോ വരുന്നത് വരെ അവർ കാത്തിരിക്കുന്നു.

യഥാർത്ഥ സാമ്പത്തിക നഷ്ടങ്ങൾ പലപ്പോഴും സംഭവിക്കുന്നത് ലളിതമായ തെറ്റുകൾ മൂലമാണ്. ഇവ സങ്കീർണ്ണമായ ഹാക്കുകളല്ല, മറിച്ച് നിങ്ങളുടെ കോഡിലെ ലോജിക് പിശകുകളാണ് (logic errors).

പണം നഷ്ടപ്പെടാൻ കാരണമാകുന്ന നാല് സാധാരണ വഴികൾ ഇവയാണ്:

  1. Race Conditions in Credit Systems നിങ്ങൾ ഒരു ഉപഭോക്താവിന്റെ ബാലൻസ് വായിക്കുന്നു, അത് പരിശോധിക്കുന്നു, തുടർന്ന് പുതിയ ബാലൻസ് രേഖപ്പെടുത്തുന്നു. ഒരു ഉപഭോക്താവ് ഒരേസമയം രണ്ട് റിക്വസ്റ്റുകൾ അയക്കുകയാണെങ്കിൽ, ആദ്യത്തെ റിക്വസ്റ്റ് ഡാറ്റാബേസ് അപ്‌ഡേറ്റ് ചെയ്യുന്നതിന് മുമ്പ് തന്നെ രണ്ട് റിക്വസ്റ്റുകളും പരിശോധനയിൽ വിജയിച്ചേക്കാം. ഇതിലൂടെ ഒരു സേവനത്തിന്റെ വിലയ്ക്ക് രണ്ട് സേവനങ്ങൾ നിങ്ങൾ നൽകേണ്ടി വരുന്നു.

The fix: Use atomic database operations. ബാലൻസ് വായിച്ച ശേഷം എഴുതുന്നതിന് പകരം, ഉപഭോക്താവിന് ആവശ്യത്തിന് ക്രെഡിറ്റ് ഉണ്ടെങ്കിൽ മാത്രം ബാലൻസ് അപ്‌ഡേറ്റ് ചെയ്യാൻ ഒരു സിംഗിൾ കമാൻഡ് ഉപയോഗിക്കുക.

  1. Trusting Client Input for Identity ചെക്ക്ഔട്ട് സമയത്ത് റിക്വസ്റ്റ് ബോഡിയിൽ (request body) നിന്നാണ് നിങ്ങൾ ഇമെയിൽ വിലാസം എടുക്കുന്നത്. ഒരു ഓതന്റിക്കേറ്റഡ് ഉപഭോക്താവിന് ആ ഇമെയിൽ മറ്റൊരാളുടെ വിലാസമാക്കി മാറ്റാൻ കഴിയും. ഇത് തെറ്റായ അക്കൗണ്ടുകൾക്കായി ബില്ലിംഗ് സെഷനുകൾ സൃഷ്ടിക്കാനോ നിങ്ങളുടെ സിസ്റ്റത്തെ പരിശോധിക്കാനോ (probe) അവരെ അനുവദിക്കുന്നു.

The fix: റിക്വസ്റ്റ് ബോഡിയിൽ നിന്നുള്ള ഐഡന്റിറ്റിയെ ഒരിക്കലും വിശ്വസിക്കരുത്. നിങ്ങളുടെ സെർവറിലെ വെരിഫൈ ചെയ്ത session token-ൽ നിന്ന് ഇമെയിൽ വേർതിരിച്ചെടുക്കുക.

  1. Broken Annual Billing Logic മിക്ക ഡെവലപ്പർമാരും Stripe പേയ്‌മെന്റ് ഇവന്റുകൾ (payment events) ശ്രദ്ധിച്ചാണ് ഉപഭോക്താക്കളുടെ ക്രെഡിറ്റ് റീസെറ്റ് ചെയ്യുന്നത്. ഇത് പ്രതിമാസ പ്ലാനുകൾക്ക് (monthly plans) അനുയോജ്യമാണ്, എന്നാൽ വാർഷിക പ്ലാനുകളിൽ (annual plans) ഇത് പരാജയപ്പെടുന്നു. Stripe വർഷത്തിൽ ഒരു തവണ മാത്രമേ ഇവന്റ് അയച്ചുതരുന്നുള്ളൂ. നിങ്ങളുടെ ഉപഭോക്താക്കൾക്ക് ഒന്നാം ദിവസം ക്രെഡിറ്റ് ലഭിക്കുന്നു, എന്നാൽ അടുത്ത പതിനൊന്ന് മാസത്തേക്ക് ഒന്നും ലഭിക്കില്ല.

The fix: ക്രെഡിറ്റ് റീസെറ്റുകളെ ബില്ലിംഗ് ഇവന്റുകളിൽ നിന്ന് വേർതിരിക്കുക. ഒരു റീസെറ്റ് തീയതി അടിസ്ഥാനമാക്കി ഏത് ഉപഭോക്താക്കൾക്കാണ് റീസെറ്റ് വേണ്ടതെന്ന് പരിശോധിക്കാൻ ഒരു daily cron job ഉപയോഗിക്കുക.

  1. Insecure Token Storage നിങ്ങൾ പാസ്‌വേഡ് റീസെറ്റ് ടോക്കണുകൾ localStorage-ൽ സൂക്ഷിക്കുന്നു. നിങ്ങളുടെ പേജിലെ ഏത് സ്ക്രിപ്റ്റിനും localStorage ആക്സസ് ചെയ്യാൻ കഴിയും. ഇതിൽ ബ്രൗസർ എക്സ്റ്റൻഷനുകളും തേർഡ് പാർട്ടി അനലിറ്റിക്സും ഉൾപ്പെടുന്നു.

The fix: റിക്കവറി ടോക്കണുകൾ കൈകാര്യം ചെയ്യാൻ നിങ്ങളുടെ authentication SDK ഉപയോഗിക്കുക. ടോക്കൺ localStorage-ൽ സൂക്ഷിക്കാതെ തന്നെ ലൈബ്രറി തന്നെ അത് ഓട്ടോമാറ്റിക്കായി പ്രോസസ്സ് ചെയ്യാൻ അനുവദിക്കുക.

പ്രശ്നം എപ്പോഴും ഒന്നാണ്: നിങ്ങൾ ക്ലയന്റിനെ വിശ്വസിക്കുന്നു. റിക്വസ്റ്റുകൾ ഓരോന്നായി വരും എന്ന് നിങ്ങൾ വിശ്വസിക്കുന്നു. ബില്ലിംഗ് ഇവന്റുകൾ എല്ലാ സാഹചര്യങ്ങളെയും ഉൾക്കൊള്ളുന്നു എന്ന് നിങ്ങൾ വിശ്വസിക്കുന്നു.

ഈ പ്രശ്നങ്ങൾ പരിഹരിക്കാൻ ഒരു ദിവസത്തിൽ താഴെ സമയം മതിയാകും. പണം നഷ്ടപ്പെടുന്നതിന് മുമ്പ് നിങ്ങളുടെ കോഡ് ഓഡിറ്റ് ചെയ്യുക.

Source: https://dev.to/manolito99/your-saas-is-probably-leaking-money-right-now-and-you-dont-know-it-1g38