Repository navigation
kAuth v1.0.4 - Güvenlik Denetimi + Kapsamlı Code Review
Bu sürüm 35 sorun içeren kapsamlı bir güvenlik denetimi ve code review sonucudur.
🔴 Kritik Güvenlik Düzeltmeleri
- DataAccessException: DB hataları artık "kayıtlı değil" veya "yanlış şifre" gibi business fact'lere sessizce dönüştürülmüyor. MySQL hiccup'ında legitim kullanıcılar yanlışlıkla banlanmıyor.
- Brute force bypass race:
VerificationEntry.attemptsartıkAtomicInteger+ConcurrentHashMap.computeile atomik check-and-update. İki paralel/dogruladenemesi artık race etmiyor. - Unified password validation:
ChangePasswordCommand,PasswordResetCommand, admin/kauth sifredegistirartıkAuthService.validatePassword()helper'ını kullanıyor. Weak password listesini (90+ entry) bypass edemiyor. - SQLite thread safety: Tüm metodlar
synchronized(lock)içinde, WAL mode + busy_timeout aktif. - getIp null bucket: Null address'li oyuncular artık
"unknown"bucket'ına eklenmiyor (cross-user session/ban collision önlendi).
🟠 Performans & Concurrency
- setAuthenticated async-safe: Bukkit API çağrıları (sendPluginMessage, updateLastLogin) async thread'den çağrıldığında main thread'e trampoline ediliyor.
- Admin komutları async:
LogoutCommand,VerifyCommand,ChangePasswordCommand,KAuthCommand(kayitsil/sifredegistir/cikis) DB yazımları async. - Settings atomic snapshot:
AtomicReference<Snapshot>pattern, cross-field invariant garantili./kauth reloadartık atomik. - ipAttempts decay: 5 dakikada bir tamamen silinmek yerine TTL bazlı decay.
- ResultSet try-with-resources: Tüm DB query'lerinde explicit close.
🟡 Hata Yönetimi & UX
- AsyncChatEvent: Deprecated
AsyncPlayerChatEvent→ Paper nativeAsyncChatEvent(1.21.11'de chat engeli aslında çalışmıyordu). - Dialog exception fallback:
DialogProviderexception'ları log'luyor ve chat fallback'e düşüyor (stuck player önlendi). - Command blocked feedback: Giriş yapmamış oyuncular artık "giriş yapmadan kullanamazsınız" mesajı görüyor.
- EmailService future tracking:
.whenCompletecallback ile SMTP fail → user'a "kod gönderilemedi" mesajı, pending code iptal. - LOGOUT → beginAuthFlow: Velocity remote logout sonrası oyuncu stuck kalmıyor, tam auth flow yeniden başlıyor.
- onDisable teardown: Tüm session task'ları kapatılıyor, stale bossbar yok.
- LoginCommand logAction %attempts%: Unlimited attempts case'i düzgün handle ediliyor.
Ayrıca
auth.max-login-attempts=0uyarısı (güvenlik riski)email.verification.code-length4-9 arası clamp (int overflow önlendi)- Velocity config read fail → severe log + secret=empty (güvenli fallback)
sessionsByNamesecondary index → offline user için declearSessionçalışıyorAuthMessagecompact constructor validation (null/empty reject)- Task self-cancel handler throw ederse temizlenir
- Duplicate root
src/dizini silindi
Test Sonuçları
- 46/46 unit test geçti (PasswordUtil, AuthMessage, SQLiteDatabase)
- 15/15 entegrasyon testi (Paper 1.21.11 + mineflayer bot)
Kurulum
| Dosya | Nereye |
|---|---|
kAuth-1.0.4.jar |
Paper sunucusu plugins/ |
kAuth-Velocity-1.0.4.jar |
Velocity proxy plugins/ |
Velocity secret'ı ilk başlatmada otomatik oluşur, konsola basılır. Paper config.yml'de velocity.secret olarak yapıştırın.