عندما يخدم تطبيق SaaS عدة مؤسسات من قاعدة بيانات واحدة، يصبح الخطأ في شرط WHERE خطرًا يتجاوز عطلًا وظيفيًا: قد يعرض سجلات مؤسسة لموظف في مؤسسة أخرى. وجود tenant_id في الجداول بداية جيدة، لكنه لا يضمن العزل إذا اعتمد كل مطور على تذكّر إضافة الشرط يدويًا. المطلوب دفاع متعدد الطبقات واختبارات تتعمد استخدام هوية مؤسسة للوصول إلى موارد مؤسسة ثانية.
عرّف حدود المستأجر من نقطة المصادقة
استخرج هوية المؤسسة من جلسة موثوقة أو رمز وصول مُتحقق منه، لا من حقل يرسله العميل ويمكن تغييره. إذا كان المستخدم عضوًا في عدة مؤسسات، فاجعل اختيار المؤسسة الحالية عملية صريحة، ثم تحقق من عضويته وصلاحياته لكل طلب. لا تخلط معرف المستخدم بمعرف المؤسسة؛ فقد يكون المستخدم مديرًا في مؤسسة ومشاهدًا في أخرى. وثّق الاستثناءات مثل موظفي الدعم وخدمة التقارير المشتركة.
استخدم طبقة بيانات تقلل الاعتماد على الذاكرة البشرية
قدّم واجهة استعلام تفرض سياق المستأجر على كل عملية قراءة وكتابة، وفكّر في سياسات Row Level Security عندما تناسب قاعدة البيانات ونموذج الاتصال. راجع خصوصًا العمليات التي لا تمر بالمسار المعتاد: التقارير، التصدير، المهام الخلفية، عمليات البحث الشامل، وواجهات الإدارة. في حالة استخدام اتصال مشترك، تحقق من إعادة ضبط سياق المستأجر عند إعادة الاتصال إلى التجمع حتى لا يرث طلب جديد إعدادات طلب سابق.
اختبر محاولات الوصول الأفقي
أنشئ مؤسستين تجريبيتين لهما سجلات متشابهة، ثم حاول باستخدام جلسة الأولى قراءة أو تعديل معرف سجل يخص الثانية. نفّذ الاختبار على المسارات المباشرة، ونتائج البحث، وروابط تنزيل الملفات، وطلبات GraphQL، وأحداث WebSocket. لا تكتفِ برد 403؛ تأكد أن رسالة الخطأ نفسها لا تكشف اسم الملف أو عنوان المشروع. اختبر أيضًا الروابط الموقعة للتنزيل وحدود انتهاء صلاحيتها.
افحص التخزين المؤقت والبحث والنسخ الاحتياطية
قد يكون استعلام قاعدة البيانات صحيحًا بينما يعيد Cache نتيجة مستخدم آخر إذا بُني المفتاح دون tenant_id. كذلك يجب أن تحمل وثائق فهرس البحث سياق المؤسسة، وأن يطبَّق الترشيح في جهة الخادم. عند استعادة نسخة احتياطية إلى بيئة اختبار، استخدم بيانات منقحة وصلاحيات مقيدة. راقب أي ارتفاع غير معتاد في محاولات الوصول المرفوضة، لكن لا تسجل محتوى حساسًا في سجل الحوادث.
أقوى دليل على العزل ليس مراجعة شرط واحد في الكود، بل مجموعة اختبارات سلبية تعمل مع كل إصدار وتغطي كل مسار يمكنه إخراج بيانات.
شارك في تقييم ونقاش المقال
رأيك يضيف قيمة للمقال ويساعدنا على تحسين المحتوى والنقاش حوله.
النقاش
جارٍ تحميل التعليقات…