Güvenlik gözden geçirmesi — OWASP ASVS 4.0 (Seviye 2) kontrol listesi (Faz 14)
Tarih: 2026-10-13. Kapsam: API (apps/api), worker, dashboard, SDK uçları, veri katmanı. Her madde kodda doğrulanmış kanıta (dosya/test) bağlanır; "kısmi"/"açık" maddeler go-live öncesi GO_LIVE_CHECKLIST.md ile izlenir.…
Tarih: 2026-10-13. Kapsam: API (apps/api), worker, dashboard, SDK uçları, veri katmanı. Her madde kodda doğrulanmış
kanıta (dosya/test) bağlanır; "kısmi"/"açık" maddeler go-live öncesi GO_LIVE_CHECKLIST.md ile izlenir. Harici pentest
isteğe bağlıdır (plan 09 Faz 14) ve bu listeyi girdi olarak kullanır.
Durum: ✅ sağlanıyor · 🟡 kısmi/operasyonel koşul · ⬜ kapsam dışı (v2)
V1 Mimari ve tasarım
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 1.1 | Tehdit modeli ve güvenlik gereksinimleri belgelenmiş | ✅ | docs/plan/08-guvenlik-ve-operasyon.md, ADR-0008 (anahtar kasası), ADR-0016 (SDK sahiplik kanıtı), ADR-0020 (kota/askıya alma) |
| 1.4 | Erişim denetimi tek noktada uygulanır | ✅ | AuthGuard → RateLimitGuard → TenantGuard (APP_GUARD sırası, apps/api/src/app.module.ts); platform admin PlatformAdminGuard |
| 1.5 | Girdi/çıktı sınırlarında şema doğrulaması | ✅ | Zod DTO'lar (nestjs-zod), ZodValidationPipe tüm gövde/sorgu parametrelerinde; hata zarfı AppExceptionFilter |
| 1.9 | Gizli bilgiler kodda yok | ✅ | npm run ci:local secrets taraması (1132+ dosya), .env.example yalnızca yer tutucu |
V2 Kimlik doğrulama
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 2.1.1 | Parola uzunluk/politika | ✅ | passwordIssues (packages/auth/src/password.ts): en az PASSWORD_MIN_LENGTH karakter, en fazla 128, en az iki karakter sınıfı; AuthService.assertPasswordPolicy kayıt/değiştirme/sıfırlamada |
| 2.1.7 | Parola karması: Argon2id | ✅ | packages/auth/src/password.ts (@node-rs/argon2) |
| 2.2.1 | Kaba kuvvet koruması | ✅ | 5 başarısız / 15 dk kilit + artan gecikme (LOCKOUT_MAX_FAILURES), IP bazlı @RateLimit(AUTH_RATE) |
| 2.2.3 | Yeni cihaz/konum bildirimi | ✅ | new_login e-postası (establishSession) |
| 2.5 | Parola sıfırlama: tek kullanımlık, süreli token, e-posta varlığı sızdırılmaz | ✅ | email_tokens (sha256, 1 saat), forgotPassword sabit yanıt |
| 2.7–2.8 | MFA (TOTP + kurtarma kodları), org düzeyinde zorunlu kılma | ✅ | MfaService, organizations.settings.mfaRequired (TenantGuard), platform admin için zorunlu |
| 2.9 | OAuth girişi: state + PKCE, doğrulanmış e-posta, geri dönüş URL'si yalnızca kendi alan adı | ✅ | OAuthService (state Redis 10 dk, S256, return_to yalnızca /…) |
| 2.10 | Servis kimlik bilgileri (sağlayıcı anahtarları) şifreli, loglanmaz | ✅ | Envelope encryption (data_keys, MASTER_KEY), secret_enc; audit metadata maskeli |
V3 Oturum yönetimi
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 3.2 | Oturum belirteci opak, 256 bit, sunucu tarafında sha256 | ✅ | SessionService.create (generateOpaqueToken(32)) |
| 3.3 | Çıkış ve zaman aşımı; mutlak yaş politikası | ✅ | kayan 14 gün, org sessionMaxHours, revokeAll, oturum listesi |
| 3.4 | Çerez bayrakları | ✅ | httpOnly, secure (prod), SameSite=Lax (common/cookies.ts) |
| 3.5 | API anahtarları: hash'li saklama, kapsam, IP izin listesi, rotasyon, anında iptal | ✅ | api_keys.key_hash, Redis revoked bayrağı, ip_allowlist, /rotate |
| 3.7 | Yetki yükseltmede yeniden doğrulama (parola/MFA değişikliği) | ✅ | changePassword/mfa.disable mevcut parola + kod ister |
V4 Erişim denetimi
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 4.1.1 | Kiracı izolasyonu her sorguda + RLS | ✅ | TenantGuard org/app çözümlemesi (var olmayan → 404), TenantRlsInterceptor (istek başına set_config), tenant-isolation.int.test.ts + her faz testinde izolasyon vakası |
| 4.1.3 | En az ayrıcalık rolleri | ✅ | packages/tenancy/src/roles.ts (owner…viewer, composer), API anahtarı kapsamları, plan rol kapısı |
| 4.2.2 | CSRF | ✅ | double-submit (hs_csrf çerezi = x-csrf-token) /internal mutasyonlarında (http-hooks.ts), SameSite=Lax |
| 4.3.1 | Yönetim arayüzü ayrı kimlik ve MFA | ✅ | /admin/v1 + is_platform_admin (yalnızca SQL/seed) + MFA; support session salt okunur ve denetlenir |
| 4.3.3 | Askıya alınmış kiracı erişimi | ✅ | HS_ORG_SUSPENDED API/dashboard/SDK (phase13.int.test.ts) |
V5 Doğrulama, temizleme ve kodlama
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 5.1 | Pozitif doğrulama, boyut sınırları | ✅ | Zod şemaları (uzunluk/enum/regex), bodyLimit 1 MB (olay batch 5 MB, webhook 256 KB) |
| 5.2.2 | HTML temizleme (e-posta/in-app içerikleri) | ✅ | MJML/Liquid render sunucuda, dashboard önizlemesi DOMPurify; in-app blok tabanlı (ham HTML yok) |
| 5.2.6 | SSRF | ✅ | packages/webhooks/src/ssrf.ts (DNS çözümleme sonrası özel aralıklar, yönlendirme kapalı), journey webhook düğümü aynı kontrol, mock sağlayıcı dışında WEBHOOK_ALLOW_INSECURE_TARGETS yalnızca dev |
| 5.3.3 | Çıktı kodlama (tercih merkezi/çıkış sayfaları) | ✅ | escapeHtml tüm dinamik alanlarda (tracking.service.ts), e-posta şablonları (mail/templates.ts) |
| 5.3.4 | SQL enjeksiyonu | ✅ | Drizzle parametreli sorgular; ham sql şablonları yalnızca parametreli |
| 5.5.2 | Güvenli JSON ayrıştırma | ✅ | Fastify JSON ayrıştırıcı + derinlik/boyut sınırı; webhook ham gövde yalnızca imza doğrulamasından sonra parse |
V6–V8 Kriptografi, hata/log, veri koruma
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 6.2 | Onaylı algoritmalar | ✅ | AES-256-GCM envelope (ADR-0008), HMAC-SHA256 imzalar (webhook, izleme, Stripe/iyzico), Argon2id, VAPID ES256 |
| 6.4 | Anahtar rotasyonu | ✅ | docs/runbooks/key-rotation.md, data_keys sürümleme |
| 7.1 | Loglarda gizli bilgi yok; request_id | ✅ | pino redaksiyon, API istek logları yalnızca meta (api_request_logs), audit metadata maskeli (value_masked) |
| 7.4 | Hata yanıtları iç ayrıntı sızdırmaz | ✅ | AppExceptionFilter → standart zarf (HS_INTERNAL genel mesaj, request_id) |
| 8.1 | PII: hash'li arama, maskeli görüntüleme, export/log maskeleme | ✅ | token_hash, suppression özetleri, a***e@example.com; KVKK/GDPR silme ve dışa aktarma (privacy.int.test.ts) |
| 8.3.4 | Veri saklama süreleri | ✅ | retention işi (plan limiti retention_days), partition düşürme |
V9–V10 İletişim ve kötü amaçlı kod
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 9.1 | TLS; HSTS | 🟡 | HSTS başlığı prod'da (http-hooks.ts); TLS sonlandırma infra/compose nginx/caddy (go-live'da sertifika) |
| 10.3 | Bağımlılık taraması | ✅ | npm audit --audit-level=high (ci:local audit: high=0, critical=0), lockfile commit'li; CI ci.yml |
V12–V14 Dosya, API, yapılandırma
| # | Kontrol | Durum | Kanıt |
|---|---|---|---|
| 12.1 | Dosya yükleme sınırları (CSV import, medya) | ✅ | import multipart boyut sınırı, MIME/boyut kontrolü, S3 imzalı URL 24 sa |
| 13.1 | API: yetkilendirme, hız sınırı, idempotency | ✅ | kapsam/izin guard'ları, token-bucket (plan bazlı api_rps), Idempotency-Key 24 sa |
| 13.2 | Webhook alıcıları imza doğrular | ✅ | SNS/Svix/Twilio/Stripe/iyzico/mock imzaları, ham gövde, zaman toleransı |
| 14.4 | Güvenlik başlıkları | ✅ | API: x-content-type-options, referrer-policy, permissions-policy, x-frame-options, HSTS; dashboard: CSP (next.config.ts), aynı başlıklar |
| 14.5 | CORS | ✅ | /sdk origin kontrolü (allowed_origins), dashboard yalnızca APP_URL |
| 14.2 | Üretim yapılandırması ve bağımlılıklar | ✅ | NODE_ENV=production açılış kontrolleri: mock faturalama reddedilir, mock sağlayıcı yalnızca ALLOW_MOCK_PROVIDERS=true (staging), WEBHOOK_ALLOW_INSECURE_TARGETS açılamaz, MASTER_KEY zorunlu, uygulama DB rolü süper kullanıcı/BYPASSRLS olamaz (assertRlsEnforced); bağımlılıklar: Dependabot (npm, Actions, Docker, Gradle, Maven, NuGet, pip, Bundler, Composer, Go, pub), npm audit --audit-level=high (ci:local), gitleaks git geçmişi taraması (CI) |
Açık / kapsam dışı
- Harici penetrasyon testi (isteğe bağlı; bu liste girdi).
- SSO (SAML/OIDC), JWT identity verification modu — v2 (ADR-0017).
- WAF/bot koruması — altyapı katmanı (go-live).
White-label: marka, özel alan adı ve bayi hesabı
Pushizo'yu kendi markanızla sunun: panelde ve sistem e-postalarında ürün adınız, logonuz ve renkleriniz; kendi alan adlarınızda panel, izleme bağlantıları, tercih merkezi ve durum sayfası; ajanslar için alt müşteri…
Kendi sunucunuzda çalıştırma
Pushizo'yu kendi altyapınızda kurma seçenekleri — tek sunucu Docker Compose ve Kubernetes Helm; bileşenler, sistem gereksinimleri, ortam değişkenleri, imajlar, güncelleme ve yedekleme özeti.