الوحدة 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 |
تنفيذ عمليات بشكل متزامن يؤدي لخلل في النتائج |
3️⃣ مبادئ الترميز الدفاعي (Defensive Coding)
مفهوم الترميز الدفاعي يعني كتابة كود يفترض دائمًا وجود "سلوك غير متوقع أو عدائي".
🔐 المبادئ الأساسية:
- التحقق من جميع المدخلات.
- استخدام استثناءات واضحة ومعالَجة.
- التحقق من الحالة قبل العمل على المتغيرات.
- عدم الثقة في أي كود خارجي أو تابع ثالث (Third-party Code).
- كتابة كود قابل للاختبار والفحص.
4️⃣ الممارسات الآمنة للبرمجة
✔️ افعل:
- استخدم Prepared Statements عند التعامل مع قواعد البيانات.
- قم بتشفير المخرجات (Output Encoding) عند العرض في المتصفح.
- تأكد من إدارة الجلسات (Sessions) بشكل آمن (مدة صلاحية، إعادة توليد التوكن).
- طبق Principle of Least Privilege على الكود والوحدات.
❌ لا تفعل:
- لا تستخدم أوامر النظام مباشرة (eval, exec) مع مدخلات غير موثوقة.
- لا تفترض أن مدخلات المستخدم آمنة.
- لا تحفظ كلمات المرور كنص عادي (Plain Text).
5️⃣ أدوات تحليل الكود (Static Analysis Tools)
تساعد أدوات التحليل الساكن (SAST) في اكتشاف نقاط الضعف دون تنفيذ البرنامج.
🛠️ أدوات مشهورة:
| الأداة |
الوصف |
| SonarQube |
فحص جودة الكود والثغرات |
| Semgrep |
فحص سريع ومتخصص بنمط الكود |
| Checkmarx |
أداة احترافية شاملة |
| Bandit (للغة Python) |
فحص لأمان أكواد بايثون |
6️⃣ مراجعة الكود (Code Review)
مراجعة الكود تساهم في:
- اكتشاف الثغرات.
- تحسين جودة الكود.
- تبادل المعرفة بين المطورين.
أنواع المراجعة:
- مراجعة يدوية (Manual Review): مطور يراجع الكود بعناية.
- مراجعة تلقائية (Automated Review): باستخدام أدوات مثل SonarQube.
قائمة مراجعة الأمن:
- هل تم التحقق من جميع المدخلات؟
- هل تم التعامل مع الاستثناءات؟
- هل هنالك عملية تسجيل (Logging) للأحداث المهمة؟
- هل توجد إدارة فعالة للذاكرة والمصادر؟
7️⃣ دراسات حالة
🧪 مثال:
أحد التطبيقات قام بحفظ كلمة المرور كنص عادي في قاعدة البيانات. بعد تسريب قاعدة البيانات، تعرض جميع المستخدمين للاختراق!
التصحيح:
- تجزئة كلمة المرور باستخدام خوارزمية قوية مثل bcrypt.
- إضافة Salt عشوائي لكل كلمة مرور.
أنشطة مقترحة
- تحميل كود مصدر يحتوي على ثغرات (مثل WebGoat أو DVWA) وتحليلها.
- تجربة أدوات مثل Semgrep أو SonarQube محليًا.
- كتابة دالة تحقق من مدخلات المستخدم، ثم محاولة كسرها.
التقييم الذاتي
- ما الفرق بين تحليل الكود الساكن (SAST) والديناميكي (DAST)؟
- ما هي مخاطر استخدام eval() في البرمجة؟
- كيف تتعامل مع مدخلات المستخدم الحساسة في تطبيق ويب؟
ملخص الوحدة
كتابة كود آمن هي المهارة الأساسية لأي مطور يهتم بأمن البرمجيات. من خلال تطبيق مبادئ الترميز الدفاعي، واستخدام أدوات التحليل، وإجراء المراجعة الفعالة للكود، يمكننا بناء أنظمة أكثر أمانًا من الداخل للخارج.
في الوحدة الخامسة، سنتعلم كيف نختبر هذه البرمجيات من منظور أمني باستخدام أدوات الاختبار المختلفة.