FixVibe
Covered by FixVibehigh

ایمن سازی Next.js + Supabase: جلوگیری از دور زدن امنیت سطح ردیف (RLS)

برنامه های ساخته شده با Next.js و Supabase اغلب به امنیت سطح ردیف (RLS) برای محافظت از داده ها متکی هستند. فعال نکردن RLS یا پیکربندی نادرست سرویس گیرنده Supabase می تواند منجر به قرار گرفتن در معرض کامل پایگاه داده شود و به کاربران غیرمجاز امکان خواندن یا تغییر سوابق حساس را بدهد.

CWE-284

تاثیر

اگر امنیت سطح ردیف (RLS) به درستی [S1] اعمال نشود، مهاجمان می توانند منطق برنامه را برای خواندن، به روز رسانی یا حذف سوابق در پایگاه داده دور بزنند. این اغلب منجر به قرار گرفتن اطلاعات شناسایی شخصی (PII) یا داده‌های حساس برنامه برای کاربرانی می‌شود که فقط به کلید عمومی ناشناس API دسترسی دارند.

علت اصلی

Supabase از امنیت سطح ردیف Postgres برای مدیریت دسترسی به داده ها در سطح پایگاه داده استفاده می کند که برای ایمن سازی داده ها [S1] اساسی است. در یک محیط Next.js، توسعه دهندگان باید یک سرویس گیرنده Supabase ایجاد کنند که کوکی ها و جلسات را به درستی مدیریت کند تا امنیت در حین رندر سمت سرور [S2] حفظ شود. آسیب‌پذیری‌ها معمولاً زمانی ایجاد می‌شوند که:

  • جداول بدون فعال بودن RLS ایجاد می شوند و از طریق کلید anon عمومی [S1] قابل دسترسی هستند.
  • سرویس گیرنده Supabase در Next.js به اشتباه پیکربندی شده است، و نمی تواند به درستی توکن های احراز هویت کاربر را به پایگاه داده [S2] ارسال کند.
  • توسعه دهندگان به طور تصادفی از کلید service_role در کد سمت کلاینت استفاده می کنند که تمام خط مشی های RLS [S1] را دور می زند.

رفع بتنی

  • فعال کردن RLS: اطمینان حاصل کنید که امنیت سطح ردیف برای هر جدول در پایگاه داده Supabase [S1] شما فعال است.
  • تعریف خط مشی ها: برای SELECT، INSERT، UPDATE، و UPDATE، و DELETE خط مشی های Postgres خاصی ایجاد کنید تا بر اساس UID دسترسی کاربر را محدود کنید. [S1].
  • از کلاینت های SSR استفاده کنید: بسته @supabase/ssr را برای ایجاد کلاینت هایی در Next.js که به درستی احراز هویت سمت سرور و ماندگاری جلسه [S2] را مدیریت می کنند، پیاده سازی کنید.

چگونه FixVibe آن را آزمایش می کند

FixVibe قبلاً این موضوع را از طریق بررسی برنامه‌های مستقر و مخزن پوشش می‌دهد. ماژول غیرفعال baas.supabase-rls URL Supabase و جفت‌های کلید بی‌نظیر را از بسته‌های جاوا اسکریپت با منشأ یکسان کشف می‌کند، از PostgREST برای فراداده جدول عمومی می‌خواهد، و انتخاب‌های فقط خواندنی محدودی را برای تأیید قرار گرفتن در معرض داده‌های ناشناس مشتری بدون جهش انجام می‌دهد. اسکن‌های Repo همچنین repo.supabase.missing-rls را اجرا می‌کنند تا انتقال‌های SQL را که جداول عمومی را بدون ENABLE ROW LEVEL SECURITY ایجاد می‌کنند پرچم‌گذاری کنند، و اسکن‌های مخفی قبل از رسیدن به مرورگر به دنبال نوردهی کلید نقش سرویس می‌گردند.