FixVibe
Covered by FixVibehigh

تأمين Next.js + Supabase: منع تجاوزات الأمان على مستوى الصف (RLS)

غالبًا ما تعتمد التطبيقات المبنية باستخدام Next.js وSupabase على أمان مستوى الصف (RLS) لحماية البيانات. يمكن أن يؤدي الفشل في تمكين RLS أو التكوين الخاطئ لعميل Supabase إلى كشف كامل لقاعدة البيانات، مما يسمح للمستخدمين غير المصرح لهم بقراءة السجلات الحساسة أو تعديلها.

CWE-284

التأثير

يمكن للمهاجمين تجاوز منطق التطبيق لقراءة السجلات أو تحديثها أو حذفها في قاعدة البيانات إذا لم يتم فرض أمان مستوى الصف (RLS) بشكل صحيح. يؤدي هذا غالبًا إلى كشف معلومات التعريف الشخصية (PII) أو بيانات التطبيق الحساسة للمستخدمين الذين لديهم فقط إمكانية الوصول إلى مفتاح API العام المجهول.

السبب الجذري

يستخدم Supabase Postgres Row Level Security لإدارة الوصول إلى البيانات على مستوى قاعدة البيانات، وهو أمر أساسي لتأمين البيانات [S1]. في بيئة Next.js، يجب على المطورين إنشاء عميل Supabase الذي يتعامل بشكل صحيح مع ملفات تعريف الارتباط وجلسات العمل للحفاظ على الأمان أثناء العرض من جانب الخادم [S2]. تنشأ نقاط الضعف عادةً عندما:

  • يتم إنشاء الجداول دون تمكين RLS، مما يجعلها قابلة للوصول عبر المفتاح المجهول العام [S1].
  • تم تكوين عميل Supabase بشكل خاطئ في Next.js، مما أدى إلى الفشل في تمرير الرموز المميزة لمصادقة المستخدم بشكل صحيح إلى قاعدة البيانات [S2].
  • يستخدم المطورون عن طريق الخطأ مفتاح service_role في التعليمات البرمجية من جانب العميل، مما يتجاوز جميع سياسات RLS [S1].

الإصلاحات الخرسانية

  • تمكين RLS: تأكد من تمكين أمان مستوى الصف لكل جدول في قاعدة بيانات Supabase [S1].
  • تحديد السياسات: أنشئ سياسات Postgres محددة لعمليات SELECT وINSERT وUPDATE وDELETE لتقييد الوصول بناءً على UID الخاص بالمستخدم [S1].
  • استخدام عملاء SSR: قم بتنفيذ حزمة @supabase/ssr لإنشاء عملاء في Next.js الذين يديرون المصادقة من جانب الخادم واستمرارية الجلسة بشكل صحيح [S2].

كيفية اختبار FixVibe لذلك

يغطي FixVibe هذا بالفعل من خلال عمليات التحقق من التطبيقات المنشورة والريبو. تكتشف وحدة baas.supabase-rls السلبية عنوان URL لـ Supabase وأزواج المفاتيح المجهولة من حزم JavaScript ذات الأصل نفسه، وتطلب من PostgREST بيانات تعريف الجدول العام، وتقوم بإجراء تحديدات محدودة للقراءة فقط لتأكيد الكشف عن البيانات المجهولة دون تغيير بيانات العميل. تقوم عمليات فحص الريبو أيضًا بتشغيل repo.supabase.missing-rls لوضع علامة على عمليات ترحيل SQL التي تنشئ جداول عامة بدون ENABLE ROW LEVEL SECURITY، وتبحث عمليات الفحص السرية عن الكشف عن مفتاح دور الخدمة قبل أن تصل إلى المتصفح.