$npx -y skills add komunite/tezgah --skill saas-api-securitySaaS uygulaması için API güvenlik katmanı kur. Rate limiting, plan bazlı erişim kontrolü, input validation, hata yönetimi, CORS ve health check. Bu skill'i kullanıcı API güvenliği, rate limiting, yetkilendirme, input doğrulama, hata yönetimi veya API koruması ile ilgili bir şey i
| 1 | # SaaS API Security — Güvenlik ve Kalite Katmanı |
| 2 | |
| 3 | Bu skill, bir SaaS uygulamasının API katmanını güvenlik, dayanıklılık ve kalite açısından sağlamlaştırır. Diğer katmanların (auth, payments) üzerine son bir koruma ve kalite katmanı olarak eklenir. |
| 4 | |
| 5 | **Bağımlılık:** Bu skill **saas-launcher** orkestratör skill'inin Faz 7'sidir. Bağımsız olarak da kullanılabilir. |
| 6 | |
| 7 | **Bağlı skill'ler:** |
| 8 | - **saas-auth** — Oturum bilgisi API korumasının temelini oluşturur. |
| 9 | - **saas-payments** — Plan bilgisi erişim kontrolü kararlarını belirler. |
| 10 | |
| 11 | --- |
| 12 | |
| 13 | ## Güvenlik Katmanları Mimarisi |
| 14 | |
| 15 | Bir API isteği geldğinde sırasıyla şu katmanlardan geçmelidir: |
| 16 | |
| 17 | ``` |
| 18 | İstek geldi |
| 19 | → 1. Rate Limiting (çok fazla istek mi?) |
| 20 | → 2. Authentication (kim bu?) |
| 21 | → 3. Authorization (bu işlemi yapma yetkisi var mı? Planı uygun mu?) |
| 22 | → 4. Input Validation (gönderdiği veri geçerli mi?) |
| 23 | → 5. İş Mantığı (asıl işlem) |
| 24 | → 6. Hata Yönetimi (bir şeyler ters giderse) |
| 25 | → Cevap döndür |
| 26 | ``` |
| 27 | |
| 28 | Her katman bağımsızdır ve ihlal durumunda sonraki katmanlara geçmeden isteği reddeder. |
| 29 | |
| 30 | --- |
| 31 | |
| 32 | ## 1. Rate Limiting |
| 33 | |
| 34 | ### Neden Gerekli |
| 35 | |
| 36 | Rate limiting olmadan: |
| 37 | - Bir kullanıcı (veya bot) saniyede binlerce istek göndererek sunucunu çökertebilir (DDoS) |
| 38 | - Brute force saldırıları giriş sayfasını hedef alabilir |
| 39 | - API'ni bedava kullanan biri kaynaklarını tüketebilir |
| 40 | - Ödeme webhook endpoint'in dışarıdan spam'lanabilir |
| 41 | |
| 42 | ### Strateji |
| 43 | |
| 44 | Rate limit'i iki seviyede uygula: |
| 45 | |
| 46 | **Global seviye (IP bazlı):** Tüm endpoint'lere uygula. Saniyede veya dakikada belirli sayıda istek. Amaç: DDoS ve brute force koruması. |
| 47 | |
| 48 | **Endpoint seviyesi (kullanıcı bazlı):** Hassas endpoint'lere ayrıca uygula — login denemesi, checkout oluşturma, e-posta gönderimi. Amaç: kaynakların adil kullanımı. |
| 49 | |
| 50 | ### Serverless Ortamda Rate Limiting |
| 51 | |
| 52 | Serverless ortamlarda (Vercel, Netlify) her istek ayrı bir process'te çalışır. Bu yüzden in-memory rate limiting (bellekte sayaç tutma) çalışmaz — her process kendi belleğine sahiptir, sayaçlar paylaşılmaz. |
| 53 | |
| 54 | Çözüm: Dış bir veri deposu kullan. Upstash Redis serverless ortamlar için optimize edilmiş managed Redis servisidir. HTTP üzerinden çalışır (TCP bağlantısı gerektirmez), her istekte sayacı Redis'te tutar. Ücretsiz katmanı çoğu erken SaaS için yeterlidir. |
| 55 | |
| 56 | Basit proje veya MVP'de Upstash bile fazlaysa: rate limiting'i atla ve production'da ihtiyaç ortaya çıkınca ekle. Ama login endpoint'i ve webhook endpoint'i için en azından basit bir koruma koy. |
| 57 | |
| 58 | ### Rate Limit Yanıtı |
| 59 | |
| 60 | Limit aşıldığında HTTP 429 (Too Many Requests) döndür. Yanıtta şu bilgileri header olarak ekle: |
| 61 | - Toplam limit (X-RateLimit-Limit) |
| 62 | - Kalan hak (X-RateLimit-Remaining) |
| 63 | - Sıfırlanma zamanı (X-RateLimit-Reset) |
| 64 | |
| 65 | Kullanıcı dostu hata mesajı: "Çok fazla istek gönderildi. Lütfen birkaç saniye bekleyip tekrar deneyin." |
| 66 | |
| 67 | --- |
| 68 | |
| 69 | ## 2. Authentication Kontrolü |
| 70 | |
| 71 | Bu katman **saas-auth** skill'inin kurduğu oturum sistemini tüketir. |
| 72 | |
| 73 | Her korumalı API endpoint'inde oturum kontrolü yap: |
| 74 | - Oturum yoksa → 401 Unauthorized döndür |
| 75 | - Oturum geçersiz veya süresi dolmuşsa → 401 döndür |
| 76 | - Oturum geçerliyse → kullanıcı bilgisini sonraki katmana aktar |
| 77 | |
| 78 | Middleware ile genel koruma zaten yapılmış olmalı (bkz. **saas-auth**). API route seviyesinde ek kontrol, middleware'in kapsamadığı edge case'ler için güvenlik ağıdır. |
| 79 | |
| 80 | --- |
| 81 | |
| 82 | ## 3. Authorization — Plan Bazlı Erişim Kontrolü |
| 83 | |
| 84 | Authentication "kim bu?" sorusunu cevaplar. Authorization "bu kişi bu işlemi yapabilir mi?" sorusunu cevaplar. |
| 85 | |
| 86 | ### Plan Hiyerarşisi |
| 87 | |
| 88 | Plan'ları bir hiyerarşi olarak tanımla: free < starter < pro < enterprise. Her API endpoint'i minimum bir plan seviyesi gerektirir. Kullanıcının planı gereken seviyenin altındaysa 403 Forbidden döndür. |
| 89 | |
| 90 | 403 yanıtı kullanıcı dostu olmalı: |
| 91 | - Mevcut plan bilgisi |
| 92 | - Gereken plan bilgisi |
| 93 | - Yükseltme URL'si (fiyatlandırma sayfasına link) |
| 94 | |
| 95 | ### Plan Kontrol Noktaları |
| 96 | |
| 97 | Sadece API route'larda değil, şu noktalarda da plan kontrolü yap: |
| 98 | - **UI seviyesinde:** Üst plan gerektiren özellikleri görsel olarak kilitle (kilit ikonu, "Pro planı gerektirir" etiketi). Bu UX'tir, güvenlik değil — gerçek kontrol her zaman server-side'da. |
| 99 | - **API seviyesinde:** Her korumalı endpoint'te plan kontrolü. Bu gerçek güvenlik katmanıdır. |
| 100 | - **Kaynak limitleri:** "5 projeye kadar" gibi limitleri yeni kaynak oluşturma endpoint'lerinde kontrol et. |
| 101 | |
| 102 | ### Kullanım Bazlı Limitler |
| 103 | |
| 104 | Bazı planlar aylık API çağrısı veya işlem limiti içerir. Bu limitleri takip et: |
| 105 | - Her API çağrısında sayacı artır |
| 106 | - Limite yaklaşıldığında uyarı header'ı ekle |
| 107 | - Limit aşıldığında 429 döndür (rate limit'ten farklı — bu plan lim |