| Private Array Returned From A Public Method Açıklığı (CWE-495) | |||||
| Bu makalede Private Array Returned From A Public Method (CWE-495), yani Public Bir Metottan Private Dizi Döndürülmesi açıklığı anlatılacaktır.
Açıklık Önem Derecesi: Düşük Açıklığın Etkisi: Private dizinin dışarıdan modifiye edilebilmesi Açıklığın Açıklaması: Class’larda (sınıflarda) dizi veri tipli instance variable’lar (diğer adıyla field’lar, Türkçesiyle sınıf değişkenleri) değişebilir nesnelerdir. Yani bu türden nesneler üzerine yazma yapılabilir. Eğer uygulama public metot üzerinden bir private dizi field’ı referansı dönüyorsa bu dönen referansa dışarıdan yapılacak herhangi bir modifkasyon private field’ı etkileyecektir. Bir public metottan (örn; getter metodundan) private dizi türündeki field’ın referansını döndürmek bu private field’a herhangi bir yerden public’miş gibi modifikasyon yapılmasına izin verir. Bu encapsulation prensibi ihlali anlamına gelir. Böylesi bir modifikasyon esnekliği uygulamanın akış kontrolünü ve veri bütünlüğünü etkileyebilir, veri sızıntısına yol açabilir. Private dizi field’ı ne amaç için kullanılıyorsa o amaç dışarıdan suistimal edilebilir. Public bir metotta private dizi referansı döndürülürse “Public Bir Metottan Private Dizi Döndürülmesi (CWE-495)” açıklığı olarak ele alınır. Örneğin bu açıklığa sahip Java ve C++ kod blokları verilmiştir: Java - Güvensiz Kod Bloğu:
// ENG: Returns A Reference To A Private Array Type Field
// TR : Public getter Metodu Dizi Tipli Private Field’ın Referansını Döndürür
public class Person {
private final String name;
private String[] visited = {"New York", "California", "Colorado"};
public String[] getVisited() {
return visited;
}
}
// TUR: Private Dizi Field’ı Dışarıdan Public miş Gibi Modifiye Edilir. Person person1 = new Person(); byte[] exposedVisited = person1.getVisited(); exposedVisited[0] = "İstanbul"; // Private field dışardan modifiye olur. Bu örnekte private bir dizi değişkeninin referansı public bir metotta döndürülmektedir. Ardından dışarıdan bu private field’ın yer aldığı sınıftan bir nesne oluşturulmaktadır ve nesne getter ile private field’ın referansını alarak dışarıdan private field’ı modifiye etmektedir. Bu encapsulation ihlalidir. Güvensizdir. Java - Güvenli Kod Bloğu:
// Returns A Reference To A “Cloned” Array Type Field,
// Not Affecting Object's Field
public class Person {
private final String name;
private String[] visited = {"New York", "California", "Colorado"};
public String[] getVisited() {
return visited.clone();
}
}
Bu örnekte private dizi değişkeni public metotta döndürülmemektedir, onun yerine private dizi değişkeninin kopyası public metotta döndürülmektedir. Bu ise private dizi değişkeninin orijinalini saklı tutatacağından encapsulation ihlal olmaz ve güvenli kodlama örneği olarak yer alır. C++ - Güvensiz Kod Bloğu:
// ENG: Returns A Reference To A “Cloned” Array Type Field,
// Not Affecting Object's Field
// TUR: Dizi Tipli Private Field’ın Kopyası Referans olarak
// Döndürülür ve Nesnenin Orijinal Private Field’ı
// Etkilenmez
class Color {
private:
int[2] colorArray;
int colorValue;
public:
Color () : colorArray { 1, 2 }, colorValue (3) { };
// Private Dizi Referansı Döndürür
int[2] & fa () { return colorArray; }
// Private Int Referansı Döndürür
int & fv () { return colorValue; }
};
int main () {
Color color;
// (!) color.fa() colorArray private field’ının referansını
// döndürür ve private field’ın üzerine public miş gibi
// dışarıdan veri yazar.
color.fa () [1] = 42;
// (!) color.fv() colorValue private field’ının referansını
// döndürür ve private field’ın üzerine public miş gibi
// dışarıdan veri yazar.
color.fv () = 42;
return 0;
}
Bu örnekte ise 2 elemanlı private int dizisi colorArray, bir de private int değişkeni colorValue tanımlanmıştır. fa() ve fv() isimli tanımlanan public metotlar ise colorArray ve colorValue private değişkenlerin referansını döndürmektedir. Bu durum main() içerisinde fa() ve fv()’nin döndürdüğü referanslar üzerinden private değişkenlere veri yazmaya (dizi değişkeninin birinci elemanına 42, int değişkenine ise 42 değeri yazmaya) imkan vermektedir. Tıpkı public field’mış gibi dışarından modifiye edilmektedirler. Bu encapsulation ihlalidir. Güvensizdir. Açıklığın Önlemi:
|
|||||
Bu yazı 25.10.2025 tarihinde, saat 15:43:08'de yazılmıştır.
25.10.2025 tarihi ve 13:36:13 saatinde ise güncellenmiştir. |
|||||
|
|||||
| Yorumlar |
|||||
| Henüz yorum girilmemiştir. | |||||
| Yorum Ekle | |||||
Bu yazı 25.10.2025 tarihinde, saat 15:43:08'de yazılmıştır.
25.10.2025 tarihi ve 13:36:13 saatinde ise güncellenmiştir.