RLS כבוי ב-Supabase באפליקציית v0
v0 של Vercel מייצר קומפוננטות ואפליקציות Next.js שנפרסות ל-Vercel.
מה הבעיה
Row Level Security הוא מנגנון ההרשאות של Supabase. כשהוא כבוי על טבלה, כל מי שמחזיק את המפתח הציבורי (anon) - כלומר כל מבקר באתר - יכול לקרוא אותה ישירות.
למה זה מסוכן
המפתח הציבורי מוטמע בקוד שהדפדפן מוריד. בלי RLS זה שקול למסד נתונים פתוח לאינטרנט: רשימות משתמשים, הזמנות ופרטים אישיים נקראים בשאילתה אחת.
איפה זה מתוקן ב-v0
משתני סביבה מוגדרים ב-Vercel (Project Settings > Environment Variables). כל משתנה עם קידומת NEXT_PUBLIC_ נשלח לדפדפן - סודות בלי הקידומת הזו בלבד.
שלבי התיקון
- הפעל RLS על כל טבלה:
ALTER TABLE <table> ENABLE ROW LEVEL SECURITY; - הוסף policy שמגבילה קריאה לשורות של המשתמש:
USING (auth.uid() = user_id) - טבלאות שאין להן סיבה להיקרא מהדפדפן - השאר בלי policy, וגש אליהן רק מצד השרת
ההנחיה להדביק ב-v0
העתק את ההנחיה הבאה לכלי שבנה את האפליקציה (באנגלית - כך הכלים עובדים הכי טוב):
Enable Row Level Security on every Supabase table and add owner-scoped policies (auth.uid() = user_id). List every table that currently has RLS disabled and fix each one.
איך מוודאים שהתיקון עבד
הרץ סריקה חוזרת - הבדיקה מנסה לקרוא את הטבלאות עם המפתח הציבורי בלבד ומדווחת מה עדיין פתוח.
עוד בנושא
בדיקה חינם
רוצה לדעת אם האפליקציה שלך חשופה? סרוק בחינם ב-30 שניות וקבל ציון אבטחה + הוראות תיקון.