תוכן העניינים
הסיכון הקריטי: מדוע כלי בינה מלאכותית מדלגים על Row-Level Security#
מנגנון Row-Level Security (RLS) ב-PostgreSQL הוא שכבת ההגנה העליונה של מאגרי המידע שלכם בעבודה עם Supabase. כברירת מחדל, טבלאות חדשות ב-Supabase עלולות לחשוף פרופילי משתמשים, פרטי תשלום וסודות מסחריים לכל דורש דרך ממשק ה-PostREST הציבורי.
> כלי פיתוח מבוססי AI (כגון Cursor, Bolt.new, v0) נוטים לייצר מיגרציות ללא פקודת ALTER TABLE ... ENABLE ROW LEVEL SECURITY. פוליסה חסרה אחת מאפשרת לגורם עוין להוריד את כל טבלת המשתמשים או הלידים שלכם באמצעות המפתח הציבורי האנונימי.
תוכנית עבודה להקשחה מלאה של בסיס הנתונים#
בצעו את הצעדים הבאים עבור כל טבלה ציבורית ב-Supabase:
-- שלב 1: הפעלת RLS על כל הטבלאות ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY; ALTER TABLE public.domains ENABLE ROW LEVEL SECURITY; ALTER TABLE public.domain_tasks ENABLE ROW LEVEL SECURITY;
-- שלב 2: פוליסת קריאה מאובטחת של המשתמש בלבד CREATE POLICY "משתמשים יכולים לצפות רק בפרופיל שלהם" ON public.profiles FOR SELECT USING (auth.uid() = id);
-- שלב 3: פוליסת עדכון מאובטחת של המשתמש בלבד CREATE POLICY "משתמשים יכולים לעדכן רק את הפרופיל שלהם" ON public.profiles FOR UPDATE USING (auth.uid() = id) WITH CHECK (auth.uid() = id); ```
מניעת הסלמת הרשאות ורקורסיה בפוליסות#
- 1**השתמשו ב-
SECURITY INVOKERכברירת מחדל**: פונקציות ירוצו עם הרשאות המשתמש המבצע ויכבדו את כללי ה-RLS. - 2**הגדירו
SET search_path = publicבעבודה עםSECURITY DEFINER**: בעת יצירת טריגרים על הרשמת משתמשים, קבעו תמיד את נתיב החיפוש למניעת מתקפות search-path injection. - 3הימנעו מרקורסיה בפוליסות: לעולם אל תבצעו שאילתת SELECT לטבלת
profilesמתוך פוליסה עלprofiles. השתמשו בפונקציית עזרis_admin()ייעודית.
> בצעו ביקורת אבטחה שבועית על מסד הנתונים. כל טבלה חייבת לדווח rls_enabled: true כדי לעמוד בתקני SOC 2 ו-GDPR המחמירים.