هجوم إعادة الدخول: فهم ومنع هذه الثغرة في العقد الذكي

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

عندما واجهت أولاً ثغرة إعادة الدخول، فقدت ساعات من النوم في محاولة لفهم كيف يمكن لشخص ما استغلال قطعة من الشيفرة تبدو بريئة. المفهوم محبط ببساطة: يمكن لعقد واحد أن يستدعي عقدًا آخر قبل أن تكتمل عملية التنفيذ الأولى.

تخيل هذا: عقدA لديه 10 ETH وعقدB قد أودع 1 ETH فيه. عندما يسحب عقدB أمواله، يقوم عقدA بإرسال ETH قبل تحديث رصيد B إلى الصفر. هذه الخطأ الصغير في الترتيب يخلق ثغرة أمان ضخمة.

ماذا يحدث؟ تقوم دالة الاحتياطي في العقد الخبيث باستدعاء withdraw() مرة أخرى على الفور، ونظرًا لأن الرصيد لم يتم تحديثه بعد، فإنها تمر مرة أخرى بفحص الرصيد! تتكرر هذه الدورة حتى يتم استنزاف ContractA بالكامل. يا لها من ذكاء، أليس كذلك؟

إليك كيف يستغل المهاجم ذلك في الشيفرة:

// هجوم العقد يستدعي السحب() // ContractA ترسل ETH مما يؤدي إلى تفعيل fallback() // fallback() يستدعي withdraw() مرة أخرى قبل تحديث الرصيد // اشطف وكرر حتى تُسرق جميع الأموال

لقد شاهدت مشاريع تخسر ملايين لأنها لم تفهم هذه الثغرة الهجومية البسيطة. يجعلني غاضبًا عدد المطورين الذين لا يزالون يرتكبون هذا الخطأ المبتدئ.

ثلاث تقنيات لحماية عقودك

  1. المعدل غير القابل للتكرار

    هذا يقفل العقد أثناء التنفيذ، مما يمنع أي وظيفة محددة بهذا المعدل من إعادة الدخول. بسيط ولكنه فعال.

  2. نمط التحقق-التأثيرات-التفاعلات

    هذا هو المفضل الشخصي لدي. بدلاً من:

    // عرضة للخطر require(balance > 0). send(ether). رصيد = 0;

    قم بذلك:

    آمن require(balance > 0). رصيد = 0; // تحديث الحالة قبل التفاعلات الخارجية send(ether).

    قم دائمًا بتحديث حالتك قبل إرسال ETH أو الرموز!

  3. ** GlobalReentrancyGuard **

    بالنسبة للمشاريع التي تحتوي على عدة عقود متفاعلة، فإن هذا يوفر حماية عبر نظام عقودك بالكامل من خلال استخدام آلية قفل مشتركة.

هذه التقنيات ليست مجرد أكاديمية - لقد أنقذت عددًا لا يحصى من المشاريع من الخراب المالي التام.

لا يزال العديد من المطورين يعتقدون "لن يحدث لي ذلك" ويتجاهلون هذه الحمايات. لا تكن ذلك الشخص. يجب أن تنفذ كل دالة ترسل ETH أو رموزًا على الأقل واحدة من آليات الحماية هذه.

تذكر، في تطوير العقود الذكية، فإن جنون العظمة هو ميزة، وليس عيبًا. يمكن أن يكلفك فقدان حماية واحدة كل شيء.

ETH2.49%
شاهد النسخة الأصلية
قد تحتوي هذه الصفحة على محتوى من جهات خارجية، يتم تقديمه لأغراض إعلامية فقط (وليس كإقرارات/ضمانات)، ولا ينبغي اعتباره موافقة على آرائه من قبل Gate، ولا بمثابة نصيحة مالية أو مهنية. انظر إلى إخلاء المسؤولية للحصول على التفاصيل.
  • أعجبني
  • تعليق
  • إعادة النشر
  • مشاركة
تعليق
0/400
لا توجد تعليقات
  • تثبيت