LAB-AUTH-001 · 7 نوفمبر 2026 · الإصدار 1

مراجعة شيفرة .NET: ضوابط الوصول إلى الفواتير

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

النطاق وقاعدة العمل

برنامج يعمل في سطر الأوامر بلغة C# على .NET 10، دون حزم NuGet خارجية أو خدمة متاحة عبر الشبكة أو بيانات حقيقية. لا يُسمح بالوصول إلى الفاتورة الاصطناعية إلا لمالكها داخل مؤسسته. تنشئ الاختبارات هويات ClaimsPrincipal محلياً؛ ولا تأتي هذه الهويات من مزوّد هوية فعلي.

يشمل النطاق دالة القراءة وعشرة سيناريوهات. ولا يشمل المصادقة الفعلية أو رموز JWT أو البرمجيات الوسيطة في ASP.NET أو استعلامات Entity Framework أو إعدادات Azure أو أي نظام لطرف آخر.

النتيجة: المصادقة لا تعني امتلاك الصلاحية

تتحقق النسخة الأولية من أن المستخدم قد سجّل الدخول، ثم تبحث عن الفاتورة بمعرّفها فقط، دون التحقق من مالكها أو مؤسسته. لذلك يحصل مستخدم آخر أو مستخدم من مؤسسة أخرى على بيانات الفاتورة الاصطناعية في هذا المختبر.

الخطر الموضّح: وصول غير مصرّح به إلى فواتير مستخدم آخر أو مؤسسة أخرى. قد يكون الأثر كبيراً في نظام يحتوي على فواتير حقيقية، لكن لم تُمنح لهذا المثال التعليمي درجة CVSS تخص بيئة إنتاج. يتطلب السيناريو مستخدماً تم التحقق من هويته ومعرّف فاتورة موجوداً.

التصحيح

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

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

النتائج المرصودة — شروط التحقق نفسها قبل التصحيح وبعده

الحالات المتوقعة والمرصودة؛ يتحقق كل اختبار أيضاً من المحتوى المُعاد.
السيناريوالمتوقعقبلبعد
owner_can_read200200 — نجاح200 — نجاح
other_tenant_denied404200 — فشل404 — نجاح
other_owner_denied404200 — فشل404 — نجاح
anonymous_denied401401 — نجاح401 — نجاح
missing_tenant_denied403200 — فشل403 — نجاح
missing_subject_denied403200 — فشل403 — نجاح
duplicate_tenant_denied403200 — فشل403 — نجاح
unknown_record_not_found404404 — نجاح404 — نجاح
invalid_id_rejected400400 — نجاح400 — نجاح
tenant_case_not_normalized404200 — فشل404 — نجاح

قبل التصحيح، نجحت 4 اختبارات وفشلت 6، مع رمز الخروج المتوقع 1. وبعده، نجحت الاختبارات العشرة جميعها، مع رمز الخروج 0. تؤكد النتائج السلوك في الحالات العشر المختبَرة فقط.

إعادة إنتاج النتائج

نزّل وفك ضغط المختبر. باستخدام .NET 10 SDK، من داخل المجلد المستخرج:

dotnet build -c Release
dotnet run -c Release --no-build -- --before
dotnet run -c Release --no-build

ينبغي أن يفشل التشغيل الأول برمز 1 لإظهار العيوب المتوقعة في الشيفرة التعليمية الأولية. وينبغي أن ينجح الثاني برمز 0. لا تنشر النسخة الأولية كخدمة قابلة للوصول.

نتائج مؤرخة وبصمات SHA-256 · سجل البناء

الحدود والخطوات اللازمة

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

عدم كشف محتوى الاستجابة لا يثبت غياب القنوات الجانبية أو التسرب في السجلات أو عيوب الوظائف الأخرى. النتائج أُنتجت داخلياً دون مراجعة مستقلة. يوضّح المختبر منهجية للمعالجة، ولا يحل محل مراجع مهنية قابلة للتحقق.

العودة إلى الأدلة ونموذج التصريح ←