مراجعة داخلية · TypeScript · 8 نوفمبر 2026

السماح بالرابط يبدأ بالتحقق من أصل عنوانه.

كشفت مراجعة مكوّن التحقق من الروابط في أحد تطبيقات INOBIC عن قاعدة أوسع من المطلوب. أعدنا إظهار الخلل في الاختبارات، وصححنا المكوّن، ثم أجرينا الاختبارات نفسها مجدداً.

جرى التحقق من التصحيح محلياً. ولا يدخل نشر المنتج ضمن نطاق هذه الدراسة.

نطاق المراجعة

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

حُجبت هوية المنتج ومساراته الداخلية. النطاقات المستخدمة أدناه افتراضية، وتبقى السجلات الأصلية وإعدادات التشغيل غير منشورة.

الخلل: الاكتفاء بفحص اسم المضيف

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

Allowed origin: https://app.example.test
Allowed return: https://app.example.test/account
Different origin: https://app.example.test:8443/account

الخلل المثبت هو التساهل في التحقق. ولا تثبت هذه الاختبارات الاستيلاء على حساب أو تسرب بيانات أو استغلال المسار الكامل في الإنتاج. ويتوقف الأثر على الوجهات المتاحة فعلياً وطريقة استخدام التطبيق لها.

التصحيح

أصل عنوان مسموح به صراحة

يقارن المكوّن أصل الرابط كاملاً بالإعدادات: البروتوكول والمضيف والمنفذ بعد توحيد صيغته. ولا يُقبل عنوان محلي إلا إذا كان أصل عنوانه مذكوراً صراحة في الإعدادات.

صيغة محددة وخاضعة للتحقق

تُقبل روابط HTTP أو HTTPS فقط، بشرط ألا تتضمن اسم مستخدم أو كلمة مرور. وتُستبعد الإعدادات غير الصالحة، وتُرفض الوجهات غير المدرجة في القائمة المسموح بها.

الاختبارات نفسها قبل التصحيح وبعده

قبل التصحيح

نجح 4 اختبارات وفشل 7 من أصل 11 اختباراً للتحقق من الخلل.

بعد التصحيح

نجحت الاختبارات الـ11 جميعها، باستخدام الاختبارات المختارة وإعداداتها نفسها.

اختبارات إضافية

نجحت اختبارات الوحدة البرمجية الـ61 واختبارات المسارات المرتبطة الأربعة، وكذلك فحص TypeScript وبناء واجهة API.

تشمل الفحوص المنفذ والبروتوكولات وبيانات الدخول المضمنة في الرابط وأصول العناوين المحلية. وهي لا تغني عن اختبار التكامل باستخدام إعدادات الإنتاج.

الملفات المنشورة وحدود التحقق

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

node --test origin-policy.test.mjs

جرى التحقق من التصحيح في البيئة المحلية. ويلزم التحقق بصورة مستقلة من إعدادات التشغيل والمسار الخارجي والنشر قبل إصدار التصحيح في الإنتاج.

طبّق هذه المنهجية على شيفرة مشروعك

قاعدة واضحة، وخلل يمكن إعادة إظهاره، وتعديل محدد، والتحقق من السلوك المتوقع: هذه العناصر تجعل المراجعة مفيدة للفريق المسؤول عن صيانة المنتج.