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:
Gunakan uint crate untuk mendukung tipe bilangan bulat yang lebih besar, seperti U256, U512, dll.
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
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.
9 Suka
Hadiah
9
4
Bagikan
Komentar
0/400
SellLowExpert
· 07-16 05:14
Takutnya ada yang lagi terkena longsor lagi.
Lihat AsliBalas0
SigmaBrain
· 07-16 05:14
Menulis kode pasti ada yang meluap, yang mengerti pasti mengerti.
Lihat AsliBalas0
SchroedingersFrontrun
· 07-16 05:11
Kalian bilang benda ini tidak lain adalah aset di dalam Dompet yang turun ke nol.
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:
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:
toml [profile.release] overflow-checks = true panic = 'abort'
Gunakan uint crate untuk mendukung tipe bilangan bulat yang lebih besar, seperti U256, U512, dll.
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
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.