Tam sayılar aşımı, programlamada yaygın bir problemdir. Çoğu programlama dilinde, tam sayı değerleri sabit uzunlukta bir bellek alanında saklanır. Tam sayılar, en yüksek bitin işaret biti olarak kullanılıp kullanılmamasına göre işaretsiz ve işaretli olmak üzere ikiye ayrılır. Örneğin, 32 bit bellek 0 ile 4,294,967,295 aralığında işaretsiz tam sayı (uint32) veya -2,147,483,648 ile 2,147,483,647 aralığında işaretli tam sayı (int32) saklayabilir.
Tam sayılar türünün temsil edebileceği aralığı aştığında taşma (overflow) meydana gelir. Çoğu programlama dili ve derleyici bu tür hataları kontrol etmez, bunun yerine basitçe mod işlemi gerçekleştirir veya tanımsız davranış sergiler. Bu, programın çalışma sonuçlarının beklenmedik olmasına yol açabilir. Blockchain akıllı sözleşmeleri yazımında, özellikle merkeziyetsiz finans alanında, tam sayı hesaplamaları yaygındır, bu nedenle tam sayı taşma açıklarına özellikle dikkat edilmelidir.
Tam sayı taşması iki duruma ayrılabilir: üst taşma ve alt taşma.
Taşma: Hesaplama sonucu, türün temsil edebileceği maksimum değeri aşar. Örneğin, uint32'nin 0xFFFFFFFF değerine 1 eklenirse 0x00000000 olur.
Alt taşma: Hesaplama sonucu, türün temsil edebileceği en küçük değerden daha küçük olduğunda meydana gelir. Örneğin, uint32'nin 0'ı 1'den çıkardığınızda 0xFFFFFFFF olur.
2018 Nisan ayında, BeautyChain(BEC) token akdası, tam sayı taşma açığı nedeniyle saldırıya uğradı ve saldırgan büyük miktarda token elde etti. Bu açık, batchTransfer fonksiyonunda meydana geldi; çarpan taşması kontrol edilmediği için, az miktarda token bakiyesi ile büyük miktarda token transfer edilebiliyordu.
Tam sayı taşmasını önlemek için aşağıdaki önlemler alınabilir:
Rust derleme seçeneklerini yapılandırın, release modunda da tam sayı taşmasını kontrol edin ve panic tetikleyin.
Daha büyük tam sayı türlerini, örneğin U256, U512 vb. desteklemek için uint crate'i kullanın.
uint türündeki dönüştürme fonksiyonlarını kullanarak taşmayı kontrol edin, örneğin as_u128().
Hesaplamanın taşma yapıp yapmadığını kontrol etmek için Safe Math fonksiyonları, örneğin checked_add() kullanın.
Bu yöntemler aracılığıyla, tam sayı taşma açıklarından etkili bir şekilde kaçınılabilir ve akıllı sözleşmelerin güvenliği artırılabilir. Büyük sayı hesaplamalarını içeren sözleşmeler yazarken, tam sayı taşma sorununu dikkatlice ele almak zorunludur.
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
5
Share
Comment
0/400
AirdropHunterXiao
· 13h ago
Taşma mı? Klip Kuponlar ile mi karşılaşacağız?
View OriginalReply0
gas_guzzler
· 13h ago
Geliştirmeden önce taşma ayarlarını yapmayı unutmayın, kardeşler.
View OriginalReply0
0xInsomnia
· 13h ago
Taşma, ne kadar enayiyi mahvetti.
View OriginalReply0
AirdropHunterZhang
· 13h ago
Dalgalarda dalgalanmak, bedava almayı sevenlerin başı ağrıyor.
akıllı sözleşmeler tam sayı taşma açığı: koruma önlemleri detaylı açıklama
Tam Sayı Taşması Açığı ve Koruma Yöntemleri
Tam sayılar aşımı, programlamada yaygın bir problemdir. Çoğu programlama dilinde, tam sayı değerleri sabit uzunlukta bir bellek alanında saklanır. Tam sayılar, en yüksek bitin işaret biti olarak kullanılıp kullanılmamasına göre işaretsiz ve işaretli olmak üzere ikiye ayrılır. Örneğin, 32 bit bellek 0 ile 4,294,967,295 aralığında işaretsiz tam sayı (uint32) veya -2,147,483,648 ile 2,147,483,647 aralığında işaretli tam sayı (int32) saklayabilir.
Tam sayılar türünün temsil edebileceği aralığı aştığında taşma (overflow) meydana gelir. Çoğu programlama dili ve derleyici bu tür hataları kontrol etmez, bunun yerine basitçe mod işlemi gerçekleştirir veya tanımsız davranış sergiler. Bu, programın çalışma sonuçlarının beklenmedik olmasına yol açabilir. Blockchain akıllı sözleşmeleri yazımında, özellikle merkeziyetsiz finans alanında, tam sayı hesaplamaları yaygındır, bu nedenle tam sayı taşma açıklarına özellikle dikkat edilmelidir.
Tam sayı taşması iki duruma ayrılabilir: üst taşma ve alt taşma.
Taşma: Hesaplama sonucu, türün temsil edebileceği maksimum değeri aşar. Örneğin, uint32'nin 0xFFFFFFFF değerine 1 eklenirse 0x00000000 olur.
Alt taşma: Hesaplama sonucu, türün temsil edebileceği en küçük değerden daha küçük olduğunda meydana gelir. Örneğin, uint32'nin 0'ı 1'den çıkardığınızda 0xFFFFFFFF olur.
2018 Nisan ayında, BeautyChain(BEC) token akdası, tam sayı taşma açığı nedeniyle saldırıya uğradı ve saldırgan büyük miktarda token elde etti. Bu açık, batchTransfer fonksiyonunda meydana geldi; çarpan taşması kontrol edilmediği için, az miktarda token bakiyesi ile büyük miktarda token transfer edilebiliyordu.
Tam sayı taşmasını önlemek için aşağıdaki önlemler alınabilir:
Rust derleme seçeneklerini yapılandırın, release modunda da tam sayı taşmasını kontrol edin ve panic tetikleyin.
Daha büyük tam sayı türlerini, örneğin U256, U512 vb. desteklemek için uint crate'i kullanın.
uint türündeki dönüştürme fonksiyonlarını kullanarak taşmayı kontrol edin, örneğin as_u128().
Hesaplamanın taşma yapıp yapmadığını kontrol etmek için Safe Math fonksiyonları, örneğin checked_add() kullanın.
Bu yöntemler aracılığıyla, tam sayı taşma açıklarından etkili bir şekilde kaçınılabilir ve akıllı sözleşmelerin güvenliği artırılabilir. Büyük sayı hesaplamalarını içeren sözleşmeler yazarken, tam sayı taşma sorununu dikkatlice ele almak zorunludur.