AzLearn

منع حقن الأوامر

Prevent Command Injection

مفهوم ~18 دقيقة

منع حقن الأوامر — Prevent Command Injection

حقن الأوامر يحدث عندما تعامل نصاً من المستخدم كأنه أمر موثوق. أخطر أداة هنا هي eval. إذا كتبت eval "$user_input" فقد منحت المستخدم قدرة على تشغيل أي شيء يسمح به الحساب. في معظم سكربتات العمل، لا تحتاج eval أصلاً.

بدلاً من بناء أمر كسلسلة نصية، استخدم array للأمر ومعاملاته: cmd=(curl -sS "$url") ثم شغّل "${cmd[@]}". هذه الصيغة تحافظ على الحدود بين الأمر والمعاملات. لا تدمج كل شيء في string ثم تطلب من Bash تفسيره مرة ثانية.

مثال آمن

script.sh

لاحظ الفصل الواضح: echo "سيُنفَّذ: ${cmd[*]}" لطباعة الخطة، و"${cmd[@]}" للتنفيذ. لا تخلط بينهما بجعل echo جزءاً من الـarray — هذا يوهم أن الأمر سيُنفَّذ. الفصل بين dry-run والتنفيذ مقصود.

قائمة مسموحة

إذا كان المستخدم يختار عملية، استخدم case بقائمة مسموحة: start|stop|status. لا تجعل النص الذي كتبه يتحول مباشرة إلى اسم أمر.

تحدي — Challenge