FixVibe
Covered by FixVibehigh

Yo'qolgan Supabase qator darajasidagi xavfsizlik (RLS) orqali ma'lumotlarga ruxsatsiz kirish

Supabase tomonidan qo'llab-quvvatlanadigan ilovalarda ma'lumotlar xavfsizligi Row Level Security (RLS) ga tayanadi. Agar RLS aniq yoqilmagan va siyosatlar bilan sozlanmagan boʻlsa, ochiq anonim kalitga ega har qanday foydalanuvchi butun maʼlumotlar bazasi boʻylab maʼlumotlarni oʻqishi, yangilashi yoki oʻchirishi mumkin. Bu, ayniqsa, Supabase mijozi odatda ochiq API kaliti bilan ishga tushiriladigan Next.js muhitlarida juda muhim.

CWE-284

Ta'sir

Qator darajasi xavfsizligini (RLS) amalga oshirmaslik, autentifikatsiya qilinmagan buzg'unchilarga Supabase ma'lumotlar bazasidan umumiy jadvallar [S1] anon chegarasi orqali ochilganda ma'lumotlarni so'rash imkonini beradi. Next.js ilovalari odatda mijoz kodida Supabase anon kalitini ochganligi sababli, tajovuzkor ushbu kalitdan bevosita REST API qo'ng'iroqlarini amalga oshirish va ma'lumotlar bazasiga kirish va foydalanuvchi ma'lumotlariga kirish uchun foydalanishi mumkin. [S2].

Asosiy sabab

Odatiy bo'lib, Supabase-dagi Postgres jadvallari [S1] ommaviy kirishining oldini olish uchun Row Level Security-ning aniq faollashtirilishini talab qiladi. Agar dasturchi jadval yaratsa, lekin RLS ni yoqishni unutib qo‘ysa yoki cheklovchi siyosatlarni aniqlay olmasa, ma’lumotlar bazasi loyihaning anon [S1] kalitiga ega bo‘lgan har bir kishiga ma’lumotlarni oshkor qilishi mumkin. Next.js ilovalarida server tomonida renderlash va mijoz tomonidan olish ham Supabase mijozni ehtiyotkorlik bilan sozlashni talab qiladi, shuning uchun autentifikatsiya qilingan foydalanuvchi konteksti [S2] maʼlumotlar bazasi qatlamiga yetib boradi.

Beton tuzatishlar

  • RLS ni yoqing: [S1] ilova maʼlumotlarini saqlaydigan har bir ochiq jadval uchun ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; ni bajaring.
  • Siyosatlarni aniqlang: CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1] kabi foydalanuvchining autentifikatsiya holati asosida kirishni cheklovchi maxsus siyosatlarni yarating.
  • Server tomonidagi mijozlarni himoya qilish: Next.js dan foydalanayotganda, [S2] foydalanuvchilariga maʼlumotlarni qaytarishdan oldin faqat xizmat koʻrsatuvchi mijozlarni serverda saqlang va egalik filtrlarini qoʻllang.

FixVibe buni qanday sinovdan o'tkazadi

FixVibe allaqachon baas.supabase-rls orqali faqat o‘qish uchun Supabase RLS tekshiruvini ishga tushiradi. Skaner Supabase loyihasi URL manzilini va bir xil kelib chiqqan JavaScript toʻplamlaridan ochiq anon kalitini topadi, PostgREST-dan umumiy jadval meta-maʼlumotlarini soʻraydi va maʼlumotlarning foydalanuvchi seansisiz koʻrsatilishini tasdiqlash uchun faqat oʻqish uchun cheklangan tanlashga harakat qiladi. U xizmat roli hisob ma'lumotlarini kiritmaydi, yangilamaydi, o'chirmaydi yoki ishlatmaydi. Repo skanerlari buni ENABLE ROW LEVEL SECURITYsiz umumiy jadvallar yaratuvchi SQL migratsiyasini belgilovchi repo.supabase.missing-rls orqali ham oldinroq aniqlashi mumkin.