Stoaix'i tek bir platform olarak kurduk — ama üstünde onlarca farklı müşteri çalışıyor. Yazılım dünyasında buna çok kiracılı (multi-tenant) mimari deniyor: tek bir uygulama, tek bir veritabanı, ama içinde birbirinden habersiz onlarca "kiracı".
Her kiracının kendi dünyası var: müşteri kayıtları, konuşmaları, bilgi tabanı, faturası. Ve tek bir kural var — basit ama acımasız:
Bir müşterinin verisi, başka bir müşteriye asla görünmemeli. Bir kez sızarsa geri alamazsın; veriyle birlikte güven de sızar.
"Her sorguya bir müşteri filtresi ekle, bitti" diye düşünülür. Sahada işler böyle yürümüyor. Sistemin büyüklüğünü bir düşün:
Bunların her birinde kiracı sınırını doğru çekmen gerekiyor. Bir tanesini unutursan, açık sessizce orada bekler — ve fark ettiğinde iş işten geçmiş olabilir.
Erken dönemde yaşadığımız şey tam buydu. Bazı uçlar, "hangi müşteriye yazıyorsun?" bilgisini isteğin gövdesinden (request body) alıyordu. Yani kullanıcı "ben şu müşteriyim" diye söylüyordu, sistem de sorgusuz kabul ediyordu.
Bir sonraki derste bu açığın adını (IDOR) ve onu istisnasız her katmanda nasıl kapattığımızı anlatıyorum.