Tam sayı taşması, birçok programlama dilinde ortaya çıkabilen yaygın bir programlama hatasıdır. Hesaplama sonucu tam sayı türünün temsil aralığını aştığında taşma meydana gelir. Örneğin, 32 bitlik işaretsiz tam sayının (uint32) aralığı 0 ile 4.294.967.295 arasındadır. Eğer 4.294.967.295 sayısına 1 eklenirse, sonuç "taşar" ve 0 olur.
Bu taşma, özellikle finansal verilerle çalışırken ciddi program hatalarına yol açabilir. Örneğin, hisse senedi fiyatlarını 32 bit tamsayı ile temsil ettiğimizde, fiyat maksimum değeri aştığında yanlışlıkla 0 olarak okunabilir, bu da açıkça büyük bir karmaşaya neden olabilir.
Tam sayılar taşması iki duruma ayrılır: yukarı taşma ve aşağı taşma.
Taşma: Sonuç maksimum değeri aşıyor, örneğin uint32'nin 0xFFFFFFFF + 1 = 0x00000000
Alt taşma: Sonuç minimum değerden küçük, örneğin uint32'nin 0x00000000 - 1 = 0xFFFFFFFF
Blockchain akıllı sözleşmelerinde, tam sayı taşması açığı özellikle tehlikelidir. 2018 yılında, BeautyChain'in BEC token'i tam sayı taşması açığı nedeniyle saldırganlar tarafından kullanıldı ve büyük miktarda token çalındı.
Tam sayı taşmasını önlemek için Rust dili bazı etkili yöntemler sunar:
Daha büyük tam sayı türlerini desteklemek için uint crate'ini kullanın, örneğin U256, U512 vb.
Taşma tespiti için tür dönüştürme fonksiyonlarını kullanın, örneğin:
pas
let amount_u256 = U256::from(u128::MAX) + 1;
let amount_u128 = amount_u256.as_u128(); // panic tetikleyecek
checked_add, checked_sub gibi Safe Math fonksiyonlarını kullanın:
pas
let result = x.checked_sub(y).expect("Alt aşımı oluştu");
Bu yöntemlerle, tamsayı taşmalarını etkili bir şekilde tespit edebilir ve önleyebiliriz, akıllı sözleşmelerin güvenliğini artırabiliriz. Büyük sayısal hesaplamaları içeren sözleşmeler yazarken, olası taşma durumlarını dikkatlice ele almak şarttır.
View Original
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
9 Likes
Reward
9
4
Share
Comment
0/400
SellLowExpert
· 07-16 05:14
Korkarım ki yine birisi çığa kapıldı.
View OriginalReply0
SigmaBrain
· 07-16 05:14
Kod yazarken taşma olmaması mümkün değil, anlayanlar anlar.
View OriginalReply0
SchroedingersFrontrun
· 07-16 05:11
Sizlerin bahsettiği bu şey, cüzdandaki varlıkların sıfıra düşmesi değil mi?
Tam sayı taşmalarını önleme: Akıllı sözleşmelerin güvenliğini sağlamak için anahtar
Tam Sayı Taşması Açığı ve Koruma Yöntemleri
Tam sayı taşması, birçok programlama dilinde ortaya çıkabilen yaygın bir programlama hatasıdır. Hesaplama sonucu tam sayı türünün temsil aralığını aştığında taşma meydana gelir. Örneğin, 32 bitlik işaretsiz tam sayının (uint32) aralığı 0 ile 4.294.967.295 arasındadır. Eğer 4.294.967.295 sayısına 1 eklenirse, sonuç "taşar" ve 0 olur.
Bu taşma, özellikle finansal verilerle çalışırken ciddi program hatalarına yol açabilir. Örneğin, hisse senedi fiyatlarını 32 bit tamsayı ile temsil ettiğimizde, fiyat maksimum değeri aştığında yanlışlıkla 0 olarak okunabilir, bu da açıkça büyük bir karmaşaya neden olabilir.
Tam sayılar taşması iki duruma ayrılır: yukarı taşma ve aşağı taşma.
Blockchain akıllı sözleşmelerinde, tam sayı taşması açığı özellikle tehlikelidir. 2018 yılında, BeautyChain'in BEC token'i tam sayı taşması açığı nedeniyle saldırganlar tarafından kullanıldı ve büyük miktarda token çalındı.
Tam sayı taşmasını önlemek için Rust dili bazı etkili yöntemler sunar:
toml [profile.release] overflow-checks = true panik = 'iptal'
Daha büyük tam sayı türlerini desteklemek için uint crate'ini kullanın, örneğin U256, U512 vb.
Taşma tespiti için tür dönüştürme fonksiyonlarını kullanın, örneğin:
pas let amount_u256 = U256::from(u128::MAX) + 1; let amount_u128 = amount_u256.as_u128(); // panic tetikleyecek
pas let result = x.checked_sub(y).expect("Alt aşımı oluştu");
Bu yöntemlerle, tamsayı taşmalarını etkili bir şekilde tespit edebilir ve önleyebiliriz, akıllı sözleşmelerin güvenliğini artırabiliriz. Büyük sayısal hesaplamaları içeren sözleşmeler yazarken, olası taşma durumlarını dikkatlice ele almak şarttır.