[SYSTEM_STABLE]

Akıllı Kontratlarda Güvenlik: Reentrancy Saldırıları ve Önleme Yöntemleri

Web3 dünyasında bir akıllı kontratı "deploy" etmek işin sadece başlangıcıdır. Solidity geliştiricileri için en büyük kâbuslardan biri olan Reentrancy (Yeniden Giriş) saldırılarını inceliyoruz.

Saldırı Mantığı: Saldırgan kontrat, kurban kontrattan para çekerken kurban kontratın bakiyesi güncellenmeden önce fallback() fonksiyonunu kullanarak çekim işlemini tekrar tekrar tetikler.

Örnek Kod Bloğu (Zafiyetli):

// GÜVENSİZ KOD
function withdraw() public {
    uint bal = balances[msg.sender];
    require(bal > 0);
    (bool sent, ) = msg.sender.call{value: bal}("");
    require(sent, "Transfer basarisiz");
    balances[msg.sender] = 0; // Güncelleme transferden sonra! (HATA)
}

Çözüm: Her zaman Checks-Effects-Interactions modelini uygulayın. Önce kontrol edin, sonra durumu (state) güncelleyin, en son transferi gerçekleştirin. Ayrıca OpenZeppelin’in ReentrancyGuard kütüphanesindeki nonReentrant modifier'ını kullanmak hayat kurtarır.

Yorumlar