تجاوز عدد صحيح هو مشكلة شائعة في البرمجة، ويجب الانتباه إليها بشكل خاص في تطوير عقود الذكاء في سلسلة الكتل. يحدث تجاوز العدد الصحيح عندما تتجاوز نتيجة الحساب النطاق الذي يمكن لنوع العدد الصحيح تمثيله.
تنقسم تجاوزات الأعداد الصحيحة إلى حالتين: تجاوز أعلى وتجاوز أدنى. تجاوز الأعلى يعني أن النتيجة تتجاوز القيمة القصوى، على سبيل المثال، القيمة القصوى لنوع uint32 وهي 4,294,967,295 إذا أضفنا 1 ستصبح 0. أما تجاوز الأدنى فيعني أن النتيجة أقل من القيمة الدنيا، على سبيل المثال، إذا طرحنا 1 من 0 لنوع uint32 ستصبح 4,294,967,295.
على سبيل المثال، استخدم المهاجمون ثغرة تجاوز عدد صحيح للحصول على كمية كبيرة من الرموز باستخدام رمز BEC الخاص بـ BeautyChain. في دالة batchTransfer، قد يحدث تجاوز عند amount = cnt * _value، مما يؤدي إلى فشل عبارة require التي تتحقق من الرصيد.
!
لمنع تجاوز الأعداد الصحيحة، يمكن اتخاذ التدابير التالية عند تطوير العقود الذكية باستخدام Rust:
قم بتكوين التحقق من تجاوز عدد صحيح في وضع الإصدار داخل Cargo.toml.
استخدام حزمة uint لدعم أنواع الأعداد الصحيحة الأكبر، مثل U256 و U512 وغيرها.
استخدم دالة تحويل النوع uint للكشف عن التجاوز، مثل as_u128().
استخدم دوال Safe Math مثل checked_add()، checked_sub() وغيرها لإجراء العمليات الحسابية بأمان.
قم بإجراء معالجة unwrap أو expect على نتائج Option التي ترجعها دالة Safe Math.
!
من خلال هذه الطرق، يمكن تجنب المخاطر الأمنية الناتجة عن تجاوز الأعداد الصحيحة بشكل فعال. في تطوير العقود الذكية، يجب أن نكون دائمًا يقظين لمشكلة تجاوز الأعداد الصحيحة، واتخاذ التدابير الوقائية اللازمة.
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
تسجيلات الإعجاب 14
أعجبني
14
5
مشاركة
تعليق
0/400
CompoundPersonality
· 07-15 00:43
مشكلة الفائض قديمة
شاهد النسخة الأصليةرد0
MEVSandwichMaker
· 07-14 16:58
خطأ تجاوز السعة هو قائمة أساسية للاعبين المحاربين القدامى في مجال العملات الرقمية
أمان العقود الذكية: تحليل استراتيجيات الحماية من ثغرات تجاوز السعة
ثغرة تجاوز السعة الصحيحة وطرق الحماية منها
تجاوز عدد صحيح هو مشكلة شائعة في البرمجة، ويجب الانتباه إليها بشكل خاص في تطوير عقود الذكاء في سلسلة الكتل. يحدث تجاوز العدد الصحيح عندما تتجاوز نتيجة الحساب النطاق الذي يمكن لنوع العدد الصحيح تمثيله.
تنقسم تجاوزات الأعداد الصحيحة إلى حالتين: تجاوز أعلى وتجاوز أدنى. تجاوز الأعلى يعني أن النتيجة تتجاوز القيمة القصوى، على سبيل المثال، القيمة القصوى لنوع uint32 وهي 4,294,967,295 إذا أضفنا 1 ستصبح 0. أما تجاوز الأدنى فيعني أن النتيجة أقل من القيمة الدنيا، على سبيل المثال، إذا طرحنا 1 من 0 لنوع uint32 ستصبح 4,294,967,295.
على سبيل المثال، استخدم المهاجمون ثغرة تجاوز عدد صحيح للحصول على كمية كبيرة من الرموز باستخدام رمز BEC الخاص بـ BeautyChain. في دالة batchTransfer، قد يحدث تجاوز عند amount = cnt * _value، مما يؤدي إلى فشل عبارة require التي تتحقق من الرصيد.
!
لمنع تجاوز الأعداد الصحيحة، يمكن اتخاذ التدابير التالية عند تطوير العقود الذكية باستخدام Rust:
قم بتكوين التحقق من تجاوز عدد صحيح في وضع الإصدار داخل Cargo.toml.
استخدام حزمة uint لدعم أنواع الأعداد الصحيحة الأكبر، مثل U256 و U512 وغيرها.
استخدم دالة تحويل النوع uint للكشف عن التجاوز، مثل as_u128().
استخدم دوال Safe Math مثل checked_add()، checked_sub() وغيرها لإجراء العمليات الحسابية بأمان.
قم بإجراء معالجة unwrap أو expect على نتائج Option التي ترجعها دالة Safe Math.
!
من خلال هذه الطرق، يمكن تجنب المخاطر الأمنية الناتجة عن تجاوز الأعداد الصحيحة بشكل فعال. في تطوير العقود الذكية، يجب أن نكون دائمًا يقظين لمشكلة تجاوز الأعداد الصحيحة، واتخاذ التدابير الوقائية اللازمة.
!