تخطَّ إلى المحتوى

Path Traversal

اجتياز المسارات Path Traversal

Path Traversal تحدث عندما يبني الخادم مسار ملفّ من مدخل مستخدم دون تقييد، فيستخدم المهاجم رموز "للأعلى بمجلّد" للوصول لملفّات خارج المجلّد المقصود.

ميزات مثل تحميل ملفّ أو عرض صورة غالبًا تأخذ اسم ملفّ من المستخدم وتدمجه بمسار على القرص. لو لم يقيّد الخادم القيمة، يستطيع المهاجم تضمين رموز "مجلّد أعلى" ضمن الاسم للخروج من المجلّد المخصَّص والوصول لملفّات نظام حسّاسة.

يصعب سدّها بفلترة نصّية بسيطة لأن نفس الفكرة تُكتب بأشكال متعدّدة (ترميز مختلف، مسارات مطلقة) — لذا الدفاع الموثوق تصميمي لا نصّي.

الصياغة

GET /files?name=<اسم ملف يتحكّم به المستخدم>

📄 مثال

// ✅ آمن: طابق الاسم مقابل قائمة معروفة، لا تبنِ مسارًا من مدخل حرّ
const ALLOWED_FILES = new Map([
  ["invoice-2024", "/secure-storage/invoice-2024.pdf"],
]);

function resolveFile(name) {
  return ALLOWED_FILES.get(name) ?? null; // غير موجود في القائمة = مرفوض
}

const filePath = resolveFile(req.query.name);
if (!filePath) return res.status(404).end();

أهم النقاط

النقطةالوظيفة
السبب الجذريدمج مدخل مستخدم مباشرة ضمن مسار ملفّ على نظام الملفّات
الدفاع الأقوىلا تبنِ مسارًا من مدخل حرّ — استخدم معرّفًا يُطابَق مقابل قائمة معروفة
دفاع مكمّلتشغيل العملية داخل مجلّد معزول (chroot/جِيل) يقيّد الوصول حتى لو تسرّب مسار خاطئ

💡 نصائح عملية

  • لو احتجت قبول اسم ملفّ حقًّا، طبِّع المسار (normalize) وتحقّق أنه لا يزال داخل المجلّد المسموح بعد التطبيع لا قبله

⚠️ أخطاء شائعة

  • الاكتفاء بإزالة سلسلة "../" نصيًّا — قابلة للالتفاف بترميز أو تكرار (مثل "....//") يتحوّل بعد إزالة جزء منها لنفس النمط الخطر

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار CYBERSECURITY الكامل بالعربي.