- Katılım
- 7 Ocak 2026
- Mesajlar
- 290
- Tepkime puanı
- 2
- Puanları
- 18
Rust'ın varoluş amacı, C ve C++ gibi dillerde on yıllardır milyarlarca dolarlık zarara ve güvenlik açıklarına yol açan bellek hatalarını (memory safety issues) daha derleme aşamasında tamamen ortadan kaldırmaktır.
Rust, bu güvenliği "çöp toplayıcı" (Garbage Collector) kullanmadan, Ownership (Sahiplik) ve Borrow Checker (Ödünç Kontrolcüsü) mekanizmalarıyla sağlar.
Rust
C'de bu işlem sessizce yanlış belleğe yazar; Rust'ta ise programın tanımsız bir davranış sergilemesine (Undefined Behavior) asla izin verilmez.
Rust
Rust
Rust, bu güvenliği "çöp toplayıcı" (Garbage Collector) kullanmadan, Ownership (Sahiplik) ve Borrow Checker (Ödünç Kontrolcüsü) mekanizmalarıyla sağlar.
1. Buffer Overflow (Tampon Taşması) Nedir?
Bir programın, kendisi için ayrılan bellek alanının (buffer) dışına veri yazması durumudur. C dilinde bu, sınır kontrolü yapılmadığı için saldırganın bellekteki diğer verileri değiştirmesine veya kötü amaçlı kod çalıştırmasına (RCE) yol açar.Rust Nasıl Engeller?
Rust'ta bir diziye veya vektöre eriştiğinizde, derleyici ve çalışma zamanı her zaman sınır kontrolü (bounds checking) yapar.Rust
Kod:
let dizi = [1, 2, 3];
// let hata = dizi[5]; // Bu kod Rust'ta 'panic' oluşturur ve programı güvenli şekilde durdurur.
2. Dangling Pointers (Sarkan İşaretçiler)
Bir bellek adresi serbest bırakıldıktan sonra hala o adresi işaret eden bir işaretçinin kullanılmasıdır. Bu, verinin bozulmasına veya güvenlik açıklarına neden olur.Rust Nasıl Engeller?
Rust'ın Lifetimes (Yaşam Süreleri) sistemi, bir referansın işaret ettiği veriden daha uzun yaşayamayacağını garanti eder.Rust
Kod:
let r;
{
let x = 5;
r = &x; // HATA! x burada ölür, r sarkan işaretçi olamaz.
}
// println!("{}", r); // Derleyici burada "x does not live long enough" hatası verir.
3. Use-After-Free ve Double Free
Belleğin serbest bırakıldıktan sonra tekrar kullanılması (Use-after-free) veya aynı belleğin iki kez silinmeye çalışılması (Double free), en yaygın güvenlik açıklarındandır.Rust Nasıl Engeller?
Ownership (Sahiplik) kuralları gereği, bir veri kapsam dışına çıktığında sadece bir kezdrop edilir. Veri bir kez "move" edildiğinde (taşındığında), eski sahibi artık o veriye erişemez.Rust
Kod:
let s1 = String::from("Güvenlik");
let s2 = s1; // Sahiplik s2'ye geçti.
// println!("{}", s1); // HATA! s1 artık geçersiz, use-after-free imkansız.
4. Race Conditions (Veri Yarışları)
İki veya daha fazla thread'in aynı bellek adresine aynı anda erişmesi ve en az birinin yazma işlemi yapmasıdır. Bu, tespit edilmesi en zor mantıksal hatalardan biridir.Rust Nasıl Engeller?
Rust'ın "Shared XOR Mutable" (Ya paylaşılabilir ya da değiştirilebilir, ama aynı anda ikisi birden değil) kuralı, veri yarışlarını imkansız kılar.- İstediğiniz kadar
&T(read-only) referansa sahip olabilirsiniz. - Sadece bir tane
&mut T(yazılabilir) referansa sahip olabilirsiniz.
Özet: Güvenlik Karşılaştırması
| Hata Türü | C / C++ | Rust (Safe) |
| Buffer Overflow | Yaygın (Manuel kontrol şart) | İmkansız (Sınır kontrolü var) |
| Dangling Pointer | Yaygın | Derleme hatası (Lifetimes) |
| Use-After-Free | Yaygın | Derleme hatası (Ownership) |
| Data Races | Mümkün | Derleme hatası (Sync/Send Traits) |