FixVibe
Covered by FixVibehigh

אבטחת Next.js + Supabase: מניעת עקיפי אבטחה ברמת השורות (RLS)

יישומים שנבנו עם Next.js ו-Supabase מסתמכים לעתים קרובות על Row Level Security (RLS) כדי להגן על נתונים. אי הפעלת RLS או הגדרה שגויה של לקוח Supabase עלולים להוביל לחשיפה מלאה של מסד הנתונים, מה שמאפשר למשתמשים לא מורשים לקרוא או לשנות רשומות רגישות.

CWE-284

השפעה

תוקפים יכולים לעקוף את היגיון היישום כדי לקרוא, לעדכן או למחוק רשומות במסד הנתונים אם אבטחת רמת השורה (RLS) אינה נאכפת כראוי [S1]. לעתים קרובות זה גורם לחשיפה של מידע אישי מזהה (PII) או נתוני יישומים רגישים למשתמשים שיש להם גישה רק למפתח האנונימי הציבורי API.

סיבת שורש

Supabase משתמש ב-Postgres Row Level Security כדי לנהל גישה לנתונים ברמת מסד הנתונים, שהוא בסיסי לאבטחת נתונים [S1]. בסביבת Next.js, מפתחים חייבים ליצור לקוח Supabase המטפל בצורה נכונה בקובצי Cookie והפעלות כדי לשמור על אבטחה במהלך עיבוד [S2] בצד השרת. פגיעויות מתעוררות בדרך כלל כאשר:

  • טבלאות נוצרות ללא מופעלת RLS, מה שהופך אותן לנגישות באמצעות מפתח האנון הציבורי [S1].
  • לקוח Supabase מוגדר בצורה שגויה ב-Next.js, ולא מצליח להעביר כראוי אסימוני אימות משתמש למסד הנתונים [S2].
  • מפתחים משתמשים בטעות במפתח service_role בקוד בצד הלקוח, אשר עוקף את כל מדיניות RLS [S1].

תיקוני בטון

  • הפעל את RLS: ודא ש-Row Level Security מופעל עבור כל טבלה במסד הנתונים Supabase שלך [S1].
  • הגדר מדיניות: צור מדיניות Postgres ספציפית עבור SELECT, INSERT, UPDATE ו-DELETE פעולות כדי להגביל את הגישה בהתבסס על UID ZXCVIXZVICV של המשתמש.
  • השתמש בלקוחות SSR: הטמיע את חבילת @supabase/ssr כדי ליצור לקוחות ב-Next.js המנהלים בצורה נכונה את האימות בצד השרת ואת עמידות הפגישה [S2].

כיצד FixVibe בודק את זה

FixVibe כבר מכסה זאת באמצעות בדיקות אפליקציות פרוסות ו-repo. המודול הפאסיבי baas.supabase-rls מגלה צמדי URL של Supabase וצמדי מפתח אנונימיים מחבילות JavaScript מאותו מקור, מבקש מ-PostgREST מטא נתונים של טבלה ציבורית, ומבצע בחירות מוגבלות לקריאה בלבד כדי לאשר חשיפת נתונים אנונימית מבלי לשנות את נתוני הלקוחות. סריקות ריפו מרצות גם את repo.supabase.missing-rls כדי לסמן העברות SQL היוצרות טבלאות ציבוריות ללא ENABLE ROW LEVEL SECURITY, וסריקות סודיות מחפשות חשיפת מפתח תפקיד שירות לפני שהיא מגיעה לדפדפן.