| Array Declared Public, Final and Static Açıklığı (CWE-582) | |||||
| Bu makalede Array Declared Public, Final and Static (CWE-582), yani Dizilerin Public, Final ve Static Tanımlanması güvenlik kusuru anlatılacaktı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: Sabit dizilerin modifiye edilebilmesi Açıklığın Açıklaması: Uygulamalarda dizi nesneleri / değişkenleri public, final ve static tanımlanabilmektedir. final kullanımı umulduğu üzere dizinin modifiye edilmesini önler ama dizinin elemanlarının modifiye edilmesini önlemek için yeterli değildir. final belirteci nesneye / değişkene bir dizinin sadece bir defa atanmasını zorlar, ancak dizi elemanlarına değerlerin yalnızca bir kez atanabilmesini garanti etmez. Böylesi bir durumda bir de dizi public tanımlanırsa zararlı bir program dizinin depolu değerlerini değiştirebilir. Bu encapsulation’ının ihlali anlamına gelir. Bu problemi göstermek adına örnek java kod bloklarına yer verilmiştir: Java - Güvensiz Kod Bloğu:
public class example {
/**
* Get a new random id.
*/
public static final String[] ALLOWED_URLS = new String[] {"http://amazon.com", "http://cnn.com"};
public String getRandId() {
Random random = new SecureRandom();
byte[] randomBytes = new byte[csrfSize];
random.nextBytes(randomBytes);
return Hex.encodeHexString(randomBytes);
}
}
Java güvensiz kod bloğu örneğinde bir dizi nesnesinin public, static ve final tanımlandığı gösterilmiştir. Burada kullanılan public, static ve final olan dizi nesnesi izinli uzak sistemler için beyaz liste güvenlik önlemini göstermektedir. Diziler tanımlanırken final kullanılsa bile umulanın aksine dizinin elemanları değiştirilebilir olduğundan dışarıdan uygulamanın hesap edilmemiş farklı bir modülü ile veya zararlı kodlar ile bu beyaz liste önlemi modifiye edilebilir ve güvenlik önlemi atlatılabilir. Java - Güvenli Kod Bloğu:
public class example {
public static void main(String[] argv)
throws Exception
{
try {
// creating object of ArrayList<Character>
List<Character> list = new ArrayList<Character>();
// populate the list
list.add('X');
list.add('Y');
// printing the list
System.out.println("Initial list: " + list);
// getting unmodifiable list
// using unmodifiableList() method
List<Character> immutablelist = Collections .unmodifiableList(list);
// Adding element to new Collection
System.out.println("\nTrying to modify" + " the unmodifiablelist");
immutablelist.add('Z');
}
catch (UnsupportedOperationException e) {
System.out.println("Exception thrown : " + e);
}
}
}
Java güvenli kod bloğunda ise bir dizi nesnesi değiştirilemez şekilde - ArrayList ile - tanımlanmıştır. Ayrıca Collection ile unmodifiableList() kullanarak dizinin elemanları da değiştirilemez yapılmıştır. Bu sayede diziye önce X ve Y değerleri eleman olarak eklenebilirken dizi elemanları değiştirilemez yapıldığında Z değeri diziye eleman olarak eklenemez duruma gelmiştir. Bu örnek dizi tanımlaması örneğin bir önceki beyaz liste önleminde kullanılarak uygulama güvende tutulabilir. Public, static ve final tanımlanan sabit olduğu sanılan dizi hangi amaçla kullanılıyorsa o amaç üzere suistimal edilebilir.
Yaşanabilecek olası problemlerin önüne geçmek için güvensiz dizi tanımlamasının düzeltilmesi önerilmektedir. Dizilerin güvensiz tanımlanmasına “Dizilerin Public, Final ve Static Tanımlanması (CWE-582)” açıklığı adı verilir. Açıklığın Önlemi:
Yararlanılan Kaynaklar:
|
|||||
Bu yazı 19.10.2025 tarihinde, saat 10:30:43'de yazılmıştır.
22.01.2026 tarihi ve 09:24:29 saatinde ise güncellenmiştir. |
|||||
|
|||||
| Yorumlar |
|||||
| Henüz yorum girilmemiştir. | |||||
| Yorum Ekle | |||||
Bu yazı 19.10.2025 tarihinde, saat 10:30:43'de yazılmıştır.
22.01.2026 tarihi ve 09:24:29 saatinde ise güncellenmiştir.