Mencegah overflow integer: Kunci untuk menjaga keamanan smart contract

Kerentanan Overfl ow Integer dan Perlindungannya

Overflow integer adalah kerentanan pemrograman yang umum, yang dapat terjadi dalam sebagian besar bahasa pemrograman. Ketika hasil perhitungan melebihi rentang representasi tipe integer, overflow akan terjadi. Misalnya, rentang integer tanpa tanda 32-bit (uint32) adalah dari 0 hingga 4.294.967.295. Jika 4.294.967.295 ditambahkan 1, hasilnya akan "overflow" dan menjadi 0.

Overflow ini dapat menyebabkan kesalahan program yang serius, terutama saat menangani data keuangan. Misalnya, jika harga saham diwakili oleh bilangan bulat 32-bit, ketika harga melebihi nilai maksimum, ini mungkin dibaca secara salah sebagai 0, yang jelas akan menyebabkan kekacauan besar.

Overflow integer dibagi menjadi dua keadaan: overflow atas dan overflow bawah:

  • Overflow: Hasil melebihi nilai maksimum, seperti uint32 0xFFFFFFFF + 1 = 0x00000000
  • Underflow: hasil lebih kecil dari nilai minimum, seperti uint32 dari 0x00000000 - 1 = 0xFFFFFFFF

Dalam kontrak pintar blockchain, kerentanan overflow integer sangat berbahaya. Pada tahun 2018, token BEC dari BeautyChain diserang oleh penyerang karena kerentanan overflow integer, mengakibatkan banyak token dicuri.

Untuk mencegah overflow integer, bahasa Rust menyediakan beberapa metode yang efektif:

  1. Aktifkan pemeriksaan overflow dalam mode release:

toml [profile.release] overflow-checks = true panic = 'abort'

  1. Gunakan uint crate untuk mendukung tipe bilangan bulat yang lebih besar, seperti U256, U512, dll.

  2. Gunakan fungsi konversi tipe untuk mendeteksi overflow, seperti:

karat let amount_u256 = U256::from(u128::MAX) + 1; let amount_u128 = amount_u256.as_u128(); // Akan memicu panic

  1. Menggunakan fungsi Safe Math seperti checked_add, checked_sub, dll:

karat let result = x.checked_sub(y).expect("Underflow occurred");

Dengan metode ini, kita dapat secara efektif mendeteksi dan mencegah overflow integer, meningkatkan keamanan kontrak pintar. Saat menulis kontrak yang melibatkan perhitungan angka besar, sangat penting untuk menangani kemungkinan situasi overflow dengan hati-hati.

Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 4
  • Bagikan
Komentar
0/400
SellLowExpertvip
· 07-16 05:14
Takutnya ada yang lagi terkena longsor lagi.
Lihat AsliBalas0
SigmaBrainvip
· 07-16 05:14
Menulis kode pasti ada yang meluap, yang mengerti pasti mengerti.
Lihat AsliBalas0
SchroedingersFrontrunvip
· 07-16 05:11
Kalian bilang benda ini tidak lain adalah aset di dalam Dompet yang turun ke nol.
Lihat AsliBalas0
AirdropHunterWangvip
· 07-16 04:45
Sudah kena lagi, siapa yang mengerti?
Lihat AsliBalas0
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)