Koruma kuralları
Kurallar panelde yazılır, kodda değil. Her kural gölgede doğar, "aktif olsaydı ne olurdu" raporu görülmeden uygulamaya alınamaz, uygulama süreli ve her an geri alınabilir.
Kuralın parçaları
Tek kural tipi vardır: rate_limit. Bir kural şunlardan oluşur:
- Name
route + method- Type
- hedef
- Description
Şablonlanmış route ve HTTP yöntemi, ör.
POST /auth/login. Olay detayındaki "Koruma kuralı oluştur" bağlantısı bunu dolu getirir.
- Name
maxRequests / windowSec- Type
- eşik
- Description
Kayan pencerede izin verilen istek sayısı. 24 saatlik pencere bir "kota"dır; ayrı bir kota tipi yoktur.
- Name
keyBy- Type
- 'source' | 'route'
- Description
source: kaynak (IP) başına sayım.route: route toplamı — DoW (Denial of Wallet) savunması için tavan. Kullanıcı başına sayım yoktur: SDK kimlik görmez.
- Name
action- Type
- 'delay' | 'reject' | 'block'
- Description
Eşik aşıldığında ne olacağı. Aşağıda.
Eşik önerisi veriden gelir: panel son 7 günün dakikalık kovalarından route ve kaynak başına p99 × 3 önerir (tabanlı: 30 / 10). Sabit bir eşik yoktur.
Gölge raporu
Kural yaratıldığı an backend geçmiş trafiği SDK'nın aynı kayan pencere algoritmasıyla yeniden oynatır ve tek cümle üretir:
Bu kural son 7 günde aktif olsaydı 12.480 POST /api/auth/login isteğinin 31 tanesini bloklardı. Hepsi tek kaynaktan, 12 Eyl 04:12–04:19 arası, POST /api/auth/login.
Rapor iki kaynak gösterir: geçmişin yeniden oynatılması (anında) ve SDK'nın canlı işaretleri (zamanla dolar). İki kopya aynı fikstürle test edilir; raporun sayısı ile canlının davranışı eşit olmak zorundadır, yoksa rapor kanıt değil tahmin olurdu.
Gölge mod zorunludur, veritabanı seviyesinde: rapor görülmeden (report_seen_at
boşken) uygulamaya alma isteği 409 döner. Panelde Uygula düğmesi rapor
yüklenmeden açılmaz.
Süreli uygulama
Süresiz uygulama yoktur. Uygulama 10 saniye ile 24 saat arasında bir süre alır, varsayılan 30 dakika. Süre dolunca kural kendiliğinden gölgeye döner ve bildirim gider. "Geri al" her an elinizdedir; en geç bir politika çekimi sonra etkili olur.
Süre dolumunu üç yer birbirinden bağımsız uygular: SDK kendi saatiyle, /policy ucu etkin modu hesaplarken, backend'in 30 saniyelik taraması satırı düzeltip bildirim gönderirken. Backend ölürse uygulama azalabilir, asla uzayamaz.
Kademeli tepki
delay → reject (429) → block (403 + soğuma)
- delay: istek bekletilir, sonra sunulur.
- reject:
429 Too Many Requests+Retry-Afterbaşlığı. - block: eşiği aşan kaynak
blockSecboyunca koşulsuz403alır; soğuma dolduğunda pencere hâlâ sıcaksa yeniden başlar.
Bir "challenge" adımı yoktur: genel bir API middleware'i tarayıcı etkileşimi gerektiren bir meydan okuma üretemez. IDOR gibi kanıtlanamayan bulgularda otomatik blok yoktur.
SDK tarafı
protection: 'on'(varsayılan): panelden uygulamaya alınan kurallar bu süreçte uygulanır. Üç koşul birlikte gerekir: yerel modon, backend'in kural için "uygula" demesi veenforceUntil'in SDK'nın kendi saatine göre gelecekte olması.enforceUntilyoksa kural uygulanmaz.protection: 'shadow': bu kurulum yalnızca işaretler, backend ne derse desin dokunmaz. Yalnız-telemetri kurulumlar için kod seviyesinde garanti.protection: 'off': politika hiç çekilmez.sampleRatekorumayı seyreltmez; sayaç her isteği görür.- Sayaç her SDK sürecinde yereldir. Yatay ölçeklenen bir uygulamada sınır süreç başına yaklaşık uygulanır; merkezî bir sayaç Argus'u istek yoluna sokardı, fail-open ilkesine aykırı.
Politika çekimi
SDK GET {endpoint}/v1/policy ucunu varsayılan 30 saniyede bir, yalnızca API anahtarıyla çeker. Anahtar kural yazamaz; yazma uçları yalnızca panel oturumuna açıktır, dolayısıyla sızmış bir anahtar kendine kural yazamaz.
- Ağ hatası, 5xx ya da bozuk JSON: eldeki kurallar korunur.
- 401/403 (anahtar iptal): tüm kurallar düşer — yetki yok, uygulama yok.
- SDK kural icat etmez; yalnızca backend'den geleni ve süresini uygular.
Her karar olaya işlenir (protection.ruleId / action / enforced), böylece panel bir kuralın gerçekten kaç isteğe dokunduğunu, gölgede kaç isteğe dokunacak olduğunun yanında gösterir.