الفصل 34: أمن البرمجيات
مقدمة
الأمن ليس ميزة اختيارية — بل ضرورة أساسية في كل برنامج. هذا الفصل يغطي أهم مبادئ البرمجة الآمنة.
التحقق من المدخلات
قاعدة ذهبية: لا تثق بأي مدخل خارجي
sad
دالة تحقق_بريد(بريد)
إذا (نوع(بريد) != "نص")
ارمي "البريد يجب أن يكون نصاً"
نهاية
إذا (طول(بريد) < 5 أو طول(بريد) > 254)
ارمي "طول البريد غير صالح"
نهاية
إذا (ليس يحتوي(بريد، "@"))
ارمي "البريد يجب أن يحتوي @"
نهاية
ارجع صحيح
نهاية
دالة تحقق_عمر(عمر)
إذا (نوع(عمر) != "رقم")
ارمي "العمر يجب أن يكون رقماً"
نهاية
إذا (عمر < 0 أو عمر > 150)
ارمي "العمر غير منطقي"
نهاية
ارجع صحيح
نهايةتنظيف المدخلات
منع حقن الأكواد
sad
دالة تنظيف_نص(نص_المستخدم)
متغير نظيف = استبدل(نص_المستخدم، "<"، "<")
نظيف = استبدل(نظيف، ">"، ">")
نظيف = استبدل(نظيف، "\""، """)
نظيف = استبدل(نظيف، "'"، "'")
ارجع نظيف
نهاية
# الاستخدام
متغير مدخل = "<script>alert('hack')</script>"
متغير آمن = تنظيف_نص(مدخل)
aطبع_سطر(آمن) # <script>alert('hack')</script>إدارة كلمات المرور
sad
دالة تحقق_قوة_كلمة_مرور(كلمة_مرور)
متغير أخطاء = []
إذا (طول(كلمة_مرور) < 8)
أخطاء = أخطاء + ["يجب أن تكون 8 أحرف على الأقل"]
نهاية
متغير فيها_رقم = خطأ
متغير فيها_حرف_كبير = خطأ
لكل حرف في كلمة_مرور
إذا (حرف >= "0" و حرف <= "9")
فيها_رقم = صحيح
نهاية
نهاية
إذا (ليس فيها_رقم)
أخطاء = أخطاء + ["يجب أن تحتوي رقماً واحداً على الأقل"]
نهاية
إذا (طول(أخطاء) > 0)
ارجع {"صالح": خطأ، "أخطاء": أخطاء}
نهاية
ارجع {"صالح": صحيح، "أخطاء": []}
نهايةمبدأ الحد الأدنى من الصلاحيات
sad
صنف مستخدم
خاص متغير _اسم
خاص متغير _دور
باني(اسم، دور)
هذا._اسم = اسم
هذا._دور = دور
نهاية
دالة هل_مسموح(إجراء)
طابق (هذا._دور)
عندما "مشرف":
ارجع صحيح
عندما "محرر":
ارجع إجراء == "قراءة" أو إجراء == "كتابة"
عندما "قارئ":
ارجع إجراء == "قراءة"
افتراضي:
ارجع خطأ
نهاية
نهاية
نهاية
# الاستخدام
متغير م = جديد مستخدم("أحمد"، "محرر")
aطبع_سطر(م.هل_مسموح("قراءة")) # صحيح
اطبع_سطر(م.هل_مسموح("حذف")) # خطأقائمة فحص الأمن
| البند | التحقق |
|---|---|
| التحقق من المدخلات | ✅ كل مدخل خارجي |
| تنظيف المخرجات | ✅ قبل العرض |
| إدارة الأخطاء | ✅ لا تكشف تفاصيل داخلية |
| الصلاحيات | ✅ الحد الأدنى |
| كلمات المرور | ✅ قوية ومشفرة |
تمرين
أنشئ نظام تسجيل دخول آمن مع:
- تحقق من البريد الإلكتروني
- فحص قوة كلمة المرور
- قفل الحساب بعد 3 محاولات فاشلة
الحل
sad
صنف نظام_تسجيل
خاص متغير _مستخدمين = {}
خاص متغير _محاولات = {}
دالة تسجيل(بريد، كلمة_مرور)
تحقق_بريد(بريد)
متغير قوة = تحقق_قوة_كلمة_مرور(كلمة_مرور)
إذا (ليس قوة["صالح"])
ارمي "كلمة المرور ضعيفة: " + قوة["أخطاء"][0]
نهاية
هذا._مستخدمين[بريد] = كلمة_مرور
هذا._محاولات[بريد] = 0
نهاية
دالة دخول(بريد، كلمة_مرور)
إذا (هذا._محاولات[بريد] >= 3)
ارمي "الحساب مقفل"
نهاية
إذا (هذا._مستخدمين[بريد] == كلمة_مرور)
هذا._محاولات[بريد] = 0
ارجع صحيح
وإلا
هذا._محاولات[بريد] = هذا._محاولات[بريد] + 1
ارمي "بيانات خاطئة. محاولات متبقية: " + (3 - هذا._محاولات[بريد])
نهاية
نهاية
نهاية