FixVibe
Covered by FixVibehigh

Next.js + Supabase himoyasi: Qator darajasidagi xavfsizlik (RLS) aylanib o‘tishlarini oldini olish

Next.js va Supabase bilan yaratilgan ilovalar ko'pincha ma'lumotlarni himoya qilish uchun Row Level Security (RLS) ga tayanadi. RLS yoqilmasligi yoki Supabase mijozining noto‘g‘ri sozlanishi ma’lumotlar bazasining to‘liq ta’sirlanishiga olib kelishi mumkin, bu ruxsatsiz foydalanuvchilarga nozik yozuvlarni o‘qish yoki o‘zgartirish imkonini beradi.

CWE-284

Ta'sir

Agar Qator darajasi xavfsizligi (RLS) [S1] toʻgʻri qoʻllanilmasa, tajovuzkorlar maʼlumotlar bazasidagi yozuvlarni oʻqish, yangilash yoki oʻchirish uchun ilova mantigʻini chetlab oʻtishlari mumkin. Bu ko'pincha shaxsiy identifikatsiya qilinadigan ma'lumotlarning (PII) yoki maxfiy dastur ma'lumotlarining faqat ochiq anonim API kalitiga kirish huquqiga ega bo'lgan foydalanuvchilarga oshkor etilishiga olib keladi.

Asosiy sabab

Supabase ma'lumotlar bazasi darajasida ma'lumotlarga kirishni boshqarish uchun Postgres Row Level Security-dan foydalanadi, bu [S1] ma'lumotlarini himoya qilish uchun asosiy hisoblanadi. Next.js muhitida ishlab chiquvchilar [S2] server tomonida renderlash vaqtida xavfsizlikni ta'minlash uchun cookie-fayllar va seanslarni to'g'ri boshqaradigan Supabase mijozini yaratishi kerak. Zaifliklar odatda quyidagi hollarda yuzaga keladi:

  • Jadvallar RLS yoqilmagan holda yaratilgan va ularga [S1] ochiq kaliti orqali kirish mumkin.
  • Supabase mijozi Next.js da noto‘g‘ri sozlangan, [S2] ma’lumotlar bazasiga foydalanuvchi autentifikatsiya tokenlarini to‘g‘ri o‘tkaza olmadi.
  • Ishlab chiquvchilar tasodifan mijoz kodida service_role kalitidan foydalanishadi, bu esa RLS barcha [S1] siyosatlarini chetlab o‘tadi.

Beton tuzatishlar

  • RLSni yoqing: Supabase [S1] ma’lumotlar bazasidagi har bir jadval uchun Qator darajasi xavfsizligi yoqilganligiga ishonch hosil qiling.
  • Siyosatlarni aniqlang: U identifikatori asosida foydalanuvchining kirishini cheklash uchun SELECT, INSERT, UPDATE va DELETE uchun maxsus Postgres siyosatlarini yarating. [S1].
  • SSR mijozlaridan foydalaning: @supabase/ssr paketini Next.js da server tomonida autentifikatsiya va seans davomiyligini [S2] to‘g‘ri boshqaradigan mijozlar yaratish uchun amalga oshiring.

FixVibe buni qanday sinovdan o'tkazadi

FixVibe buni allaqachon o'rnatilgan ilovalar va repo tekshiruvlari orqali qamrab oladi. Passiv baas.supabase-rls moduli Supabase URL manzilini va bir xil kelib chiqqan JavaScript toʻplamlaridan anon-kalit juftlarini topadi, PostgREST-dan umumiy jadval meta-maʼlumotlarini soʻraydi va mijoz maʼlumotlarini mutatsiyaga oʻtkazmasdan anonim maʼlumotlar taʼsirini tasdiqlash uchun cheklangan faqat oʻqish uchun tanlovlarni amalga oshiradi. Repo skanerlari ENABLE ROW LEVEL SECURITYsiz umumiy jadvallarni yaratuvchi SQL migratsiyalarini belgilash uchun repo.supabase.missing-rls ni ham ishga tushiradi va maxfiy skanerlashlar brauzerga yetib borgunga qadar xizmat roli kalitlari taʼsirini qidiradi.