Ana içeriğe geç

Tehdit modeli

GuildGate, Discord dashboard sunucusunda kimliği doğrulanmış bir kullanıcının yetkili olduğu kaynağa kontrollü yazma yapmasını hedefler. Tarayıcı, istemci JavaScript'i ve gelen tüm istek alanları güvenilmez kabul edilir.

Ele alınan tehditler​

TehditUygulanan kontrol
Sahte origin veya CSRFExact-origin allowlist ve oturuma bağlı CSRF doğrulaması
Çalınmış/eskimiş oturumHashlenmiş opak token, idle/absolute expiry, rotation, revocation ve cookie temizleme
OAuth state tekrar kullanımıAtomik tek kullanımlık consume()
Token verisi sızıntısıUygulama anahtar halkasıyla şifreli credential kaydı ve audit redaction
Yetki kaybından sonra yazmaAction anında yeniden yetkilendirme
Tekrarlanan istekIdempotency reservation, request hash ve replay
Eşzamanlı güncellemeOptimistic revision, lease ve fencing token
Eski worker'ın yeni sonucu bozmasıReservation owner compare-and-set
Rate limit yarış koşuluAtomik store işlemi; PostgreSQL'de advisory lock
Commit sonrası sahte rollbackCommit kesinliği ve ayrılmış afterCommit hata yolu
Realtime kanal sızıntısıOturum ve kanal yetkisi, periyodik yeniden doğrulama, revocation
Yavaş istemci/kuyruk büyümesiPayload, queue, buffered byte, abonelik ve bağlantı ömrü sınırları
Outbox olayının iki kez teslimiAt-least-once sözleşmesi ve event ID ile consumer deduplication
Üretimde yerel adres kullanımıHTTPS ve loopback/unspecified adres reddi

Güven sınırları​

GuildGate aşağıdaki bileşenlerin doğru yapılandırıldığını varsayar:

  • TLS sonlandırma ve doğru proxy header politikası
  • güvenli secret yönetimi ve anahtar rotasyonu
  • PostgreSQL/Redis erişim kontrolü
  • Discord OAuth uygulama ayarları
  • route seviyesinde doğru action eşlemesi
  • domain yazımlarında fencing ve unique constraint kullanımı
  • log, trace ve hata izleme altyapısı

Bilerek kapsam dışında kalanlar​

Paket şunları otomatik çözmez:

  • dashboard HTML/React arayüzündeki XSS açıkları
  • Discord bot token'ının işletim sistemi seviyesinde korunması
  • veritabanı yedekleme ve felaket kurtarma
  • üçüncü taraf API'nin erişilebilirliği
  • uygulamaya özel rol hiyerarşisi ve iş kuralları
  • kötü amaçlı dependency veya CI hesabı ele geçirilmesi

Fail-open ve fail-closed kararları​

Her bağımlılık aynı hata politikasını kullanmaz. Örnekler:

  • Yetkilendirme çözülemiyorsa yazma reddedilir.
  • Fail-closed listesinde olan action için audit yazılamıyorsa transaction commit edilmez.
  • Commit sonrasında cache veya realtime yayınlanamazsa domain yazımı başarılı kalır; sorun tekrar kuyruğuna ve telemetriye gider.
  • Harici Discord okuması için retry, timeout ve circuit breaker sınırları action'a göre seçilir.

İnceleme kontrolü​

Bir action eklerken şu soruları cevapla:

  1. Kaynak kimliği kullanıcı girdisinden nasıl ayrıştırılıyor?
  2. Yetki hangi anda ve hangi Discord verisiyle doğrulanıyor?
  3. İstek tekrar edilirse aynı sonuç güvenli biçimde dönebiliyor mu?
  4. İki worker aynı kaynağı yazarsa hangisi kazanıyor?
  5. Commit sonrası yan etki başarısız olursa nasıl tekrar deneniyor?
  6. Audit kaydı secret veya gereksiz kişisel veri içeriyor mu?
  7. Realtime aboneliği yetki kaybında kapanıyor mu?

Bu cevapları action tanımında, store sözleşmesinde ve testlerde görünür tut.