منع تجاوز الأعداد الصحيحة: مفتاح لضمان أمان العقود الذكية

ثغرة تجاوز السعة العددية وطرق الحماية منها

تجاوز العدد الصحيح هو ثغرة شائعة في البرمجة، وقد تحدث في معظم لغات البرمجة. يحدث التجاوز عندما تتجاوز نتيجة الحساب نطاق تمثيل النوع الصحيح. على سبيل المثال، نطاق العدد الصحيح غير الموقّع 32 بت (uint32) هو من 0 إلى 4,294,967,295. إذا أضفنا 1 إلى 4,294,967,295، ست "تتجاوز" النتيجة وتصبح 0.

قد تؤدي هذه الفوضى إلى أخطاء برمجية خطيرة، خاصة عند التعامل مع البيانات المالية. على سبيل المثال، إذا تم تمثيل أسعار الأسهم باستخدام أعداد صحيحة 32 بت، فقد يتم قراءتها بشكل خاطئ على أنها 0 عندما تتجاوز الأسعار الحد الأقصى، مما سيسبب فوضى كبيرة.

تنقسم تجاوز السعة الصحيحة إلى حالتين: تجاوز السعة العليا وتجاوز السعة الدنيا:

  • تجاوز الحد: النتيجة تتجاوز القيمة القصوى، مثل uint32 من 0xFFFFFFFF + 1 = 0x00000000
  • الانخفاض: النتيجة أقل من القيمة الدنيا، مثل uint32 من 0x00000000 - 1 = 0xFFFFFFFF

في العقود الذكية على البلوكتشين، تعتبر ثغرات تجاوز العدد الصحيح خطيرة بشكل خاص. في عام 2018، تم استغلال ثغرة تجاوز العدد الصحيح في توكن BEC الخاص بـ BeautyChain من قبل المهاجمين، مما أدى إلى سرقة كميات كبيرة من التوكن.

!

لتجنب تجاوز الأعداد الصحيحة، توفر لغة Rust بعض الطرق الفعالة:

  1. تفعيل فحص تجاوز الحدود في وضع الإصدار:

تومل [الملف الشخصي.الإصدار] فحوصات تجاوز الفائض = صحيح الذعر = "إجهاض"

  1. استخدم حزمة uint لدعم أنواع الأعداد الصحيحة الأكبر، مثل U256 و U512 وغيرها.

  2. استخدم دالة تحويل النوع للكشف عن الفائض، مثل:

صدأ دع amount_u256 = U256 ::from(u128::MAX) + 1 ؛ دع amount_u128 = amount_u256.as_u128(); سيؤدي إلى الذعر

  1. استخدام دوال Safe Math مثل checked_add، checked_sub، إلخ:

صدأ دع النتيجة = x.checked_sub(y).expect( "حدث التدفق السفلي") ؛

!

من خلال هذه الطرق، يمكننا الكشف بشكل فعال ومنع تجاوز الأعداد الصحيحة، مما يزيد من أمان العقود الذكية. عند كتابة العقود التي تتضمن حسابات بأرقام كبيرة، يجب التعامل بحذر مع حالات التجاوز المحتملة.

!

شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • 4
  • مشاركة
تعليق
0/400
SellLowExpertvip
· 07-16 05:14
أليس هناك من تعرض لزلزال ثلجي مرة أخرى؟
شاهد النسخة الأصليةرد0
SigmaBrainvip
· 07-16 05:14
كتابة الشيفرة البرمجية لا تخلو من الأخطاء. من يفهم، يفهم.
شاهد النسخة الأصليةرد0
SchroedingersFrontrunvip
· 07-16 05:11
أليس هذا الشيء الذي تقولونه انخفاض إلى الصفر في أصول المحفظة؟
شاهد النسخة الأصليةرد0
AirdropHunterWangvip
· 07-16 04:45
مرة أخرى، وقعت في فخ. من يفهم ذلك؟
شاهد النسخة الأصليةرد0
  • تثبيت