الوحدة 4: تنفيذ وترميز البرمجيات الآمنة

Secure Coding & Implementation

أهداف الوحدة

  • فهم أبرز التهديدات البرمجية الناتجة عن الترميز السيئ.
  • التعرف على مفاهيم الترميز الدفاعي (Defensive Coding).
  • تطبيق ممارسات الترميز الآمن وفقًا لمعايير مثل OWASP وCERT.
  • استخدام أدوات التحليل الأمني للكود (مثل SAST).
  • فهم آليات مراجعة الكود (التلقائية واليدوية).

1️⃣ مقدمة

المرحلة التي يتحول فيها التصميم إلى كود فعلي هي واحدة من أخطر المراحل أمنياً.

🧨 الأخطاء في الكود هي السبب الرئيسي في معظم الثغرات، مثل:

  • SQL Injection
  • Cross Site Scripting (XSS)
  • Buffer Overflow
  • Insecure Deserialization

⚠️ الترميز الآمن ليس مهارة إضافية، بل هو ضرورة حتمية لحماية البرمجيات.


2️⃣ أبرز نقاط الضعف في البرمجة

🛠️ قائمة لأهم الثغرات التي تنتج من الترميز غير الآمن:

الثغرة التفسير
SQL Injection عدم التحقق من مدخلات المستخدم عند التعامل مع قاعدة البيانات
XSS عرض بيانات المستخدم مباشرة دون ترميز
Buffer Overflow تجاوز حجم الذاكرة المخصص عند إدخال البيانات
Insecure Object References التلاعب بمعرفات الموارد (IDs) للوصول غير المصرح
Race Conditions تنفيذ عمليات بشكل متزامن يؤدي لخلل في النتائج

راجع OWASP Top 10: OWASP Top 10


3️⃣ مبادئ الترميز الدفاعي (Defensive Coding)

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

🔐 المبادئ الأساسية:

  • التحقق من جميع المدخلات.
  • استخدام استثناءات واضحة ومعالَجة.
  • التحقق من الحالة قبل العمل على المتغيرات.
  • عدم الثقة في أي كود خارجي أو تابع ثالث (Third-party Code).
  • كتابة كود قابل للاختبار والفحص.

دليل CERT في الترميز الآمن: CERT Secure Coding


4️⃣ الممارسات الآمنة للبرمجة

✔️ افعل:

  • استخدم Prepared Statements عند التعامل مع قواعد البيانات.
  • قم بتشفير المخرجات (Output Encoding) عند العرض في المتصفح.
  • تأكد من إدارة الجلسات (Sessions) بشكل آمن (مدة صلاحية، إعادة توليد التوكن).
  • طبق Principle of Least Privilege على الكود والوحدات.

❌ لا تفعل:

  • لا تستخدم أوامر النظام مباشرة (eval, exec) مع مدخلات غير موثوقة.
  • لا تفترض أن مدخلات المستخدم آمنة.
  • لا تحفظ كلمات المرور كنص عادي (Plain Text).

دليل Google في الترميز الآمن: Google Secure Coding Practices


5️⃣ أدوات تحليل الكود (Static Analysis Tools)

تساعد أدوات التحليل الساكن (SAST) في اكتشاف نقاط الضعف دون تنفيذ البرنامج.

🛠️ أدوات مشهورة:

الأداة الوصف
SonarQube فحص جودة الكود والثغرات
Semgrep فحص سريع ومتخصص بنمط الكود
Checkmarx أداة احترافية شاملة
Bandit (للغة Python) فحص لأمان أكواد بايثون

قائمة بأدوات SAST: OWASP SAST Tools


6️⃣ مراجعة الكود (Code Review)

مراجعة الكود تساهم في:

  • اكتشاف الثغرات.
  • تحسين جودة الكود.
  • تبادل المعرفة بين المطورين.

أنواع المراجعة:

  • مراجعة يدوية (Manual Review): مطور يراجع الكود بعناية.
  • مراجعة تلقائية (Automated Review): باستخدام أدوات مثل SonarQube.

قائمة مراجعة الأمن:

  • هل تم التحقق من جميع المدخلات؟
  • هل تم التعامل مع الاستثناءات؟
  • هل هنالك عملية تسجيل (Logging) للأحداث المهمة؟
  • هل توجد إدارة فعالة للذاكرة والمصادر؟

دليل GitHub Code Scanning: GitHub Code Scanning


7️⃣ دراسات حالة

🧪 مثال:

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

التصحيح:

  • تجزئة كلمة المرور باستخدام خوارزمية قوية مثل bcrypt.
  • إضافة Salt عشوائي لكل كلمة مرور.

اقرأ عن التشفير والتخزين الآمن: OWASP Password Storage Cheat Sheet


أنشطة مقترحة

  • تحميل كود مصدر يحتوي على ثغرات (مثل WebGoat أو DVWA) وتحليلها.
  • تجربة أدوات مثل Semgrep أو SonarQube محليًا.
  • كتابة دالة تحقق من مدخلات المستخدم، ثم محاولة كسرها.

التقييم الذاتي

  1. ما الفرق بين تحليل الكود الساكن (SAST) والديناميكي (DAST)؟
  2. ما هي مخاطر استخدام eval() في البرمجة؟
  3. كيف تتعامل مع مدخلات المستخدم الحساسة في تطبيق ويب؟

ملخص الوحدة

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

في الوحدة الخامسة، سنتعلم كيف نختبر هذه البرمجيات من منظور أمني باستخدام أدوات الاختبار المختلفة.