الدرس 26 من 56 · الأمان الرقمي

لا تثق بأي مدخلات: تحقق قبل ما تنفذ

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

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

جرب هذا الكود الهش:

age = int(input("كم عمرك؟ "))
print("بعد 5 سنوات عمرك:", age + 5)

الآن اكتب مكان العمر: "خمسة عشر". البرنامج ينهار! خطأ ValueError أحمر مخيف. المستخدم ما كتب رقماً، وint() ما تعرف تحول كلمات.

الحل: نتحقق أولاً بأدوات بايثون للنصوص:

age = input("كم عمرك؟ ")
if not age.isdigit():
    print("اكتب أرقاماً فقط، مثل: 12")
elif int(age) < 1 or int(age) > 120:
    print("هذا العمر غير منطقي!")
else:
    print("بعد 5 سنوات عمرك:", int(age) + 5)

وش صار هنا؟ ثلاثة دروب: إذا مو أرقام نعلمه بلطف. إذا الرقم غير منطقي (صفر أو 500 مثلاً) نرفضه. فقط إذا عدّى الفحص كله، نستخدمه.

أدوات التحقق المفضلة عندك:

x.isdigit()   # هل النص كله أرقام؟
len(x) >= 3   # هل الطول معقول؟
x in ["نعم", "لا"]  # هل الجواب من الخيارات المسموحة؟
x.strip()     # نشيل الفراغات الزايدة من الأطراف

جرب بنفسك: سوّ برنامج يسأل عن اسم المستخدم ويرفض الاسم أقصر من حرفين أو أطول من 20. إذا عدّى الفحص، قل له أهلاً به!

اختبار سريع للدرس

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

1. input() دائماً تعطيك؟
2. وش نتيجة "خمسة".isdigit()؟
3. ليش نتحقق من المدخلات قبل التنفيذ؟
الدرس 25 الدرس 27 — الأسرار لا تُخزن كما هي: الهاش
FeLiXFeLiX AI — مساعد المنصتين