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

Verbose Error Disclosure

كشف تفاصيل الخطأ الداخلية Verbose Error Disclosure

كشف تفاصيل الخطأ (Verbose Error Disclosure) تحدث عندما يعرض التطبيق رسالة خطأ خام (stack trace، استعلام قاعدة بيانات، مسار ملفّ) مباشرة للمستخدم بدل تسجيلها داخليًّا فقط — استطلاع مجاني يسهّل هجمات لاحقة.

أي تطبيق يفشل أحيانًا — اتصال قاعدة بيانات ينقطع، ملفّ غير موجود، استثناء غير متوقّع. المشكلة ليست بحدوث الفشل نفسه، بل بما يُعاد للمستخدم عند حدوثه: رسالة خطأ افتراضية من إطار العمل أو المكتبة كثيرًا ما تتضمّن مسار ملفّات الخادم، إصدار المكتبة المستخدَمة، وأحيانًا نصّ استعلام SQL كاملًا.

هذه المعلومات لا تُستغَلّ بنفسها، لكنها تحوّل هجومًا عشوائيًّا إلى هجوم موجَّه: مهاجم يعرف إصدار مكتبة معيّنة يبحث مباشرة عن ثغراتها المعروفة (CVEs)، ومهاجم يرى بنية استعلام SQL يعرف بالضبط كيف يصيغ حقنه القادم.

الصياغة

res.status(500).send(err.stack)  // ❌ يكشف تفاصيل داخلية للمستخدم مباشرة

📄 مثال

// ✅ آمن: رسالة عامة للمستخدم، التفاصيل الكاملة تُسجَّل داخليًّا فقط
app.use((err, req, res, next) => {
  logger.error(err); // التفاصيل الكاملة في نظام تسجيل داخلي فقط
  res.status(500).json({ message: "حدث خطأ غير متوقّع، حاول لاحقًا." });
});

أهم النقاط

النقطةالوظيفة
السبب الجذريمعالج أخطاء افتراضي (framework) يعيد تفاصيل تقنية خام دون تصفية
الأثراستطلاع مجاني للمهاجم: إصدار مكتبة، بنية استعلام، مسارات داخلية
الدفاع الأساسيرسالة عامة للمستخدم دائمًا، والتفاصيل الكاملة في نظام تسجيل داخلي محمي

💡 نصائح عملية

  • فعّل وضع الإنتاج (production mode) صراحة بأي إطار عمل — كثير منها يعرض تفاصيل الخطأ كاملة فقط بوضع التطوير الافتراضي

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

  • الاكتفاء بإخفاء الخطأ بالواجهة الأمامية بينما الـ API نفسه لا يزال يعيد التفاصيل الخام في جسم الاستجابة

خصائص ذات صلة

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