SaaS'ınız Para Kaybediyor

Çoğu geliştirici SaaS ürününü yayına alır ve yoluna devam eder. Güvenliği sonraya bırakılması gereken bir görev olarak görürler. Gerçek kullanıcıların veya gerçek paranın gelmesini beklerler.

Gerçek finansal kayıplar genellikle basit hatalardan kaynaklanır. Bunlar karmaşık hack saldırıları değildir; kodunuzdaki mantık hatalarıdır.

İşte para kaybetmenize neden olan dört yaygın yol:

  1. Kredi Sistemlerinde Yarış Durumları (Race Conditions) Bir kullanıcının bakiyesini okur, kontrol eder ve ardından yeni bakiyeyi yazarsınız. Eğer bir kullanıcı aynı anda iki istek gönderirse, ilk istek veritabanını güncellemeden önce her iki istek de kontrolü geçebilir. Tek fiyatına iki hizmet vermiş olursunuz.

Çözüm: Atomik veritabanı işlemleri kullanın. Önce okuyup sonra yazmak yerine, bakiyeyi yalnızca kullanıcının yeterli kredisi varsa güncelleyecek tek bir komut kullanın.

  1. Kimlik İçin İstemci Girdisine Güvenmek Ödeme sırasında e-posta adresini istek gövdesinden (request body) alırsınız. Kimliği doğrulanmış bir kullanıcı, bu e-postayı başka birinin adresiyle değiştirebilir. Bu, yanlış hesaplar için faturalandırma oturumları oluşturmalarına veya sisteminizi yoklamalarına olanak tanır.

Çözüm: İstek gövdesinden gelen kimliğe asla güvenmeyin. E-postayı sunucunuzdaki doğrulanmış oturum jetonundan (session token) çıkarın.

  1. Bozuk Yıllık Faturalandırma Mantığı Birçok geliştirici, Stripe ödeme etkinliklerini dinleyerek kullanıcı kredilerini sıfırlar. Bu, aylık planlar için işe yarar ancak yıllık planlarda başarısız olur. Stripe yılda yalnızca bir etkinlik gönderir. Kullanıcılarınız ilk gün kredilerini alır ve sonraki on bir ay boyunca hiçbir şey alamazlar.

Çözüm: Kredi sıfırlama işlemini faturalandırma etkinliklerinden ayırın. Hangi kullanıcıların bir sıfırlama tarihine göre sıfırlanmaya ihtiyacı olduğunu kontrol etmek için günlük bir cron işi (cron job) kullanın.

  1. Güvensiz Token Depolama Şifre sıfırlama jetonlarını (tokens) localStorage'da saklarsınız. Sayfanızdaki herhangi bir betik (script) localStorage'a erişebilir. Buna tarayıcı eklentileri ve üçüncü taraf analitik araçları da dahildir.

Çözüm: Kurtarma jetonlarını yönetmek için kimlik doğrulama SDK'nızı kullanın. Kütüphanenin, jetonu yerel depolamada (local storage) saklamadan otomatik olarak işlemesine izin verin.

Sorun her zaman aynıdır: istemciye güveniyorsunuz. İsteklerin tek tek geleceğine güveniyorsunuz. Faturalandırma etkinliklerinin her durumu kapsayacağına güveniyorsunuz.

Bu sorunları düzeltmek bir günden az sürer. Para kaybetmeden önce kodunuzu denetleyin.

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