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.

  • 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:

  1. Release modunda taşma kontrolünü etkinleştir:

toml [profile.release] overflow-checks = true panik = 'iptal'

  1. Daha büyük tam sayı türlerini desteklemek için uint crate'ini kullanın, örneğin U256, U512 vb.

  2. 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

  1. 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.
  • Reward
  • 4
  • Share
Comment
0/400
SellLowExpertvip
· 07-16 05:14
Korkarım ki yine birisi çığa kapıldı.
View OriginalReply0
SigmaBrainvip
· 07-16 05:14
Kod yazarken taşma olmaması mümkün değil, anlayanlar anlar.
View OriginalReply0
SchroedingersFrontrunvip
· 07-16 05:11
Sizlerin bahsettiği bu şey, cüzdandaki varlıkların sıfıra düşmesi değil mi?
View OriginalReply0
AirdropHunterWangvip
· 07-16 04:45
Yine tuzağa düştüm, kim anlıyor ki?
View OriginalReply0
Trade Crypto Anywhere Anytime
qrCode
Scan to download Gate app
Community
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)