FixVibe
Covered by FixVibehigh

دسترسی غیرمجاز به داده از طریق امنیت سطح ردیف Supabase وجود ندارد (RLS)

در برنامه‌های دارای پشتیبان Supabase، امنیت داده‌ها بر امنیت سطح ردیف (RLS) متکی است. اگر RLS صراحتاً با خط‌مشی‌ها فعال و پیکربندی نشده باشد، هر کاربری با کلید ناشناس عمومی می‌تواند داده‌ها را در کل پایگاه داده بخواند، به‌روزرسانی یا حذف کند. این امر به ویژه در محیط های Next.js که در آن مشتری Supabase اغلب با یک کلید عمومی API مقداردهی اولیه می شود بسیار مهم است.

CWE-284

تاثیر

عدم اجرای Row Level Security (RLS) به مهاجمان احراز هویت نشده اجازه می دهد تا داده ها را از پایگاه داده Supabase جستجو کنند، زمانی که جداول عمومی از طریق مرز anon [S1] در معرض دید قرار می گیرند. از آنجایی که برنامه‌های کاربردی Next.js معمولاً کلید Supabase anon را در کد سمت کلاینت نشان می‌دهند، مهاجم می‌تواند از این کلید برای ایجاد REST مستقیم API با استفاده از تماس‌های حساس کاربر به پایگاه داده و دسترسی به اطلاعات مورد نظر کاربر به پایگاه داده استفاده کند. [S2].

علت اصلی

به طور پیش فرض، جداول Postgres در Supabase به فعال سازی صریح Row Level Security برای جلوگیری از دسترسی عمومی [S1] نیاز دارند. هنگامی که یک توسعه‌دهنده جدولی ایجاد می‌کند اما فراموش می‌کند RLS را فعال کند یا خط‌مشی‌های محدودکننده را تعریف نمی‌کند، پایگاه داده ممکن است داده‌ها را در اختیار هرکسی که کلید anon پروژه [S1] را دارد، ارائه دهد. در برنامه‌های کاربردی Next.js، رندر سمت سرور و واکشی سمت کلاینت نیز به تنظیم دقیق مشتری Supabase نیاز دارد تا زمینه کاربر احراز هویت شده به لایه پایگاه داده [S2] برسد.

رفع بتنی

  • RLS را فعال کنید: ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; را برای هر جدول عمومی که داده های برنامه [S1] را ذخیره می کند، اجرا کنید.
  • تعریف سیاست ها: سیاست های خاصی ایجاد کنید که دسترسی را بر اساس وضعیت احراز هویت کاربر محدود می کند، مانند CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • سرویس گیرندگان ایمن سمت سرور: هنگام استفاده از Next.js، سرویس گیرندگان نقش سرویس را فقط سرور نگه دارید و همچنان فیلترهای مالکیت را قبل از بازگرداندن داده ها به کاربران [S2] اعمال کنید.

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

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