| Not Static Final Logger Açıklığı (CWE-398) | |||||
| Bu makalede Not Static Final Logger (CWE-398), yani Static Final Olmayan Log Alma Nesnesi, diğer ifadeyle; Güvenli Olmayan Log Alma Nesnesi güvenlik kusuru anlatılacktır.
Güvenlik Açıklığı vs. Güvenlik Kusuru
Bu makale için seçilen başlıkta "açıklık" kelimesi yer almaktadır. Fakat bu ifade belki "dolaylı açıklık" şeklinde güncellenebilir. İstismar edilebilir güvenlik problemlerine güvenlik açıklığı denirken istismar edilemez güvenlik problemlerine güvenlik kusuru adı verilir. Bu makalede ele alınan esasında bir güvenlik kusurudur. Her güvenlik kusurunda güvenlik açıklığına yükselebilecek ihtimaller vardır. Diğer bir ifadeyle; her bir güvenlik kusurunda ilgili şartların sağlandığı durum senaryosu gelecekte meydana geldiğinde başarılı sızma girişimine gidebilecek yollar vardır. Bu sebeple güvenlik kusurları MITRE'nin CWE uluslararası güvenlik açıklıkları veritabanında güvenlik açıklıkları ile birarada beraber yer almaktadır. Statik kod analizi testlerinde uygulamaların geleceğini güvence altına almak için bugünden güvenlik kusurlarının titizlikle çözülmesi tavsiye edilir. Açıklık Önem Derecesi: Düşük Açıklığın Etkisi: Log verisi sızıntısı Açıklığın Açıklaması: Nesne yönelimli programlamada "private" belirteci üyelerin (field'ların, metotların veya constructor'ların) yalnızca deklare edildikleri aynı class'da kullanılabileceği kısıtını koyar. Bu belirteç genellikle encapsulation'ı uygulamak ve diğer class'lardan yetkisiz erişimleri önlemek için kullanılır. Nesne yönelimli programlamada - daha spesifik ifadeyle Java dilinde - "final" belirteci üyelerin (field'ların, metotların veya class'ların) modifiye edilemeyeceği ve extend edilemeyeceği kısıtını koyar. Nesne yönelimli programlamada "static" belirteci bir class'tan tanımlanan tüm nesneler (instance'lar) için her birine bellekte ayrı üyeler (field'lar veya metot) tahsis etme yerine bellekte ortak üyeler (field’lar veya metotlar) tahsis etme kısıtı koyar. Bu nedenle static üyeleri kullanmak için nesne tanımlaması gerekmez. Ortak olduklarından doğrudan class ile çağırılabilirler. Log alma nesneleri bu üç unsur ile tanımlanmazlarsa güvensiz log'lama mekanizması vardır denir.
Java - Güvensiz Kod Bloğu: // GÜVENSİZ ÖRNEK private final Logger logger = Logger.getLogger(MyClass.class); Java - Güvenli Kod Bloğu: // GÜVENLİ ÖRNEK private final static logger = Logger.getLogger(MyClass.class); Güvensiz kod bloğu örneğinde gizlilik private belirteci ile ve değişmezlik final belirteci ile sağlanmaktadır, fakat static tanımlama mevcut değildir. Bu durum en az ayrıcalık prensibine (principle of least privilege) aykırıdır. Güvenli kod bloğunda ise 3 anahtar unsurun da tanıma dahil edildiği görülmektedir. Tek bir (static) log alıcı nesne kullanmak, gizli (private) yapmak ve sabit (final) tanımlamak iyi bir programlama pratiğidir. Bu pratiğe uyulmadığında olası olumsuz durumlarda log verilerinin sızıntısı yaşanabilir. Açıklığın Önlemi: Log alıcı nesneler static, final ve private tanımlanmalıdır. Uyarı: İhtiyaç doğrultusunda private yerine protected tanımlama da uygulanabilir, fakat public asla tanımlanmamalıdır. Yararlanılan Kaynaklar
|
|||||
Bu yazı 25.10.2025 tarihinde, saat 08:49:46'de yazılmıştır.
22.01.2026 tarihi ve 10:24:42 saatinde ise güncellenmiştir. |
|||||
|
|||||
| Yorumlar |
|||||
| Henüz yorum girilmemiştir. | |||||
| Yorum Ekle | |||||
Bu yazı 25.10.2025 tarihinde, saat 08:49:46'de yazılmıştır.
22.01.2026 tarihi ve 10:24:42 saatinde ise güncellenmiştir.