CHANGELOG

Sürüm Notları

Framework'ün sürüm tarihli değişiklik kaydı. Toplam 8 sürüm.

v0.9.7 güncelleme: 2026-10-14
v0.9.0
  • Güvenlik onarım sürümü. İçerik: yayın öncesi kabul testleri geçtikten sonra [Unreleased] kalemleriyle tanımlandı; 0.9.1 canlı geçişte bulunan 4 düzeltmeyi ekler.
  • Yayın sırası ve zorunlu yükseltme adımları: UPGRADING.md.
  • Desteklenen sürümler ve bildirim kanalı: SECURITY.md.

Bağlantılar

  • Depo adresi: https://github.com/RbnCore/rbnframework

  • Karşılaştırma: 0.9.7 · 0.9.6 · 0.9.5 · 0.9.4 · 0.9.3 · 0.9.2 · 0.9.1

  • Güvenlik bildirimi: SECURITY.md

  • Yükseltme notları: UPGRADING.md

  • Biçim: Keep a Changelog · SemVer

  • Sablon motoru artık ifade guvenlik kapısı kullanıyor: {{ }} / {!! !!} içindeki ifade ham PHP olarak gömülmüyor. Değer htmlspecialchars ile kaçırılıyordu, ama ifadenin kendisi sunucuda çalışıyordu; projects/, domains/ ve framework şablonlarında kullanılan ~1500 benzersiz ifadenin tamamı envantere alındı ve yasaklı yapılar (kabuk/eval/dosya yazma/include/new/derleyici dışına çıkma) için derleme hatası veren kapı eklendi. Geri uyumluluk kanıtı: korpusun tamamı kapıdan geçiyor (0 yanlış-pozitif); şablonlarda kullanılan değişken-fonksiyon çağrıları ($getEmoji(...), $cleanPhone(...), $categoryColor(...)) çalışmaya devam ediyor.

  • Veritabanından gelen ham entegrasyon kodunda ikinci güvenlik katmanı açık kılındı. Analytics/AdSense/Tag Manager kodunun integrations ayarında tutulup düzende çıplak basılması bir özellik olduğu için kaldırılmadı; bunun yerine satır içi olay öznitelikleri (onerror= vb.) ve tehlikeli URI şemaları (javascript:, data:text/html) temizleyen bir geçiş kapısı eklendi. Meşru analiz kodları (googletagmanager, adsbygoogle, GTM) birebir korunuyor.

  • Telemetri (heartbeat) artık hiçbir koşulda isteği düşürmüyor. z_sys_heartbeats tablosu her projede kurulu değil; yazma denemesi istisna fırlatıp HTTP 500 üretebiliyordu. Tablo adı artık sabit değil (kiracının veritabanında var olan aday seçilir), varlık kontrolü istek başına bir kez yapılır ve tablo yoksa tüm veri yolları güvenli varsayılana döner. Sema oluşturma/migration yapılmadı.

  • Kimlik dogrulama ve form guvenligi sertlestirmeleri (FW-GECE-ORTA-3, B dilimi). Dort kalem:

    1. Ardisik parola denetimi yonu duzeltildi. Kontrol str_contains(\, \) ile ters calisiyordu (desenin icinde parola araniyordu); bu yuzden 9876 reddedilirken 0987 ve aaaa geciyordu. Artik parolanin icinde 4+ ardisik harf, 5+ ardisik rakam ve 4+ ayni karakter araniyor. 4 haneli 19xx/20xx (yil) istasna tutuldu: Ankara2024! gibi meşru parolalar reddedilmemeli. Etki alani yalniz yeni parola belirleyen akislar (kayit / sifre sifirlama); giris yolu degismedi.
    2. Kimlik dogrulama audit logu artik kimligi duz metin yazmiyor. Basarisiz giris denemesinde kullanici girdigi e-posta/kullanici adi oldugu gibi dosya loguna gidiyordu; kimlik alanina satir sonu eklenince sahte log satirlari uretilebiliyordu (log enjeksiyonu). Dosya logu artik maskeli (a***@***.com / ab***), tek satirlik ve 64 karakterle sinirli. Paneldeki basarisiz giris listesi icin DB kaydi (userActivity) duz metin kalir; olay mudahalesi bu kayda dayanir.
    3. Giris formunun hata mesaji ayrinti sizdirmiyor. loginSubmit catch blogu istisna mesajini kullaniciya gosteriyordu; ayni siniftaki eski canli kanitlarda kullaniciya tam olarak SQLSTATE[42S22]: Unknown column 'type' in 'where clause' (tablo/kolon adi) sizmisti. Ayrinti artik yalniz sunucu loguna (error_log) yaziliyor; giris yine basarisiz (fail-closed).
    4. Form guvenligi: dort kucuk kaplama. (a) Form denetiminin ilk adiminda oturum/depolama okunamazsa guvenlik muafiyeti VERILMIYOR (onceki hali catch blogunda rol listesini elle tekrar yazip muafiyeti hesaplIYORDU = hata durumu korumayi azaltiyordu; artik fail-closed). (b) User-Agent kara listesine sqlmap/nikto/nuclei/masscan eklendi; genel SDK imzalari (Java, axios, okhttp, node-fetch) bilincli eklenmedi (meşru API trafigini kesmemek icin; IP katmani karari ayrica). (c) Form temizliginde istege bagli strip_tags secenegi eklendi - varsayilan KAPALI, mevcut davranis aynen korunur. (d) SanitizationHandler::clean() artik null girdide sessizce bos metin donduruyor (strict_types=1 altinda TypeError veriyordu).

    Geri uyumluluk kaniti: 18 site x 9 kontrol REGRESYON=0 (2 eski beklenen FAIL haricinde), yeni birim testleri once kirmizi sonra yesil; ayni anda calisan diger iscilere ait dosyalara dokunulmadi.