FixVibe
Covered by FixVibehigh

Չլիազորված տվյալների հասանելիություն Supabase տողերի մակարդակի անվտանգության միջոցով (RLS)

Supabase-ով ապահովված հավելվածներում տվյալների անվտանգությունը հիմնված է տողերի մակարդակի անվտանգության վրա (RLS): Եթե ​​RLS-ն բացահայտորեն միացված չէ և կազմաձևված չէ կանոններով, հանրային անանուն բանալիով ցանկացած օգտվող կարող է կարդալ, թարմացնել կամ ջնջել տվյալները ամբողջ տվյալների բազայում: Սա հատկապես կարևոր է Next.js միջավայրերում, որտեղ Supabase հաճախորդը հաճախ սկզբնավորվում է հանրային API բանալիով:

CWE-284

Ազդեցություն

Տողերի մակարդակի անվտանգությունը (RLS) չկատարելը թույլ է տալիս չհաստատված հարձակվողներին հարցումներ կատարել Supabase տվյալների բազայից, երբ հանրային աղյուսակները ցուցադրվում են [S1] անոնի սահմանի միջով: Քանի որ Next.js հավելվածները սովորաբար բացահայտում են Supabase anon բանալին հաճախորդի կողմի կոդի մեջ, հարձակվողը կարող է օգտագործել այս բանալին REST API ուղղակիորեն զգայուն զանգեր կատարելու համար և մուտք գործելով օգտատիրոջ նախատեսված տեղեկատվության տվյալների բազան: [S2].

Արմատային պատճառ

Լռելյայնորեն, Postgres աղյուսակները Supabase-ում պահանջում են Row Level Security-ի հստակ ակտիվացում՝ [S1] հանրային մուտքը կանխելու համար: Երբ ծրագրավորողը աղյուսակ է ստեղծում, բայց մոռանում է միացնել RLS-ն կամ չի կարողանում սահմանել սահմանափակող քաղաքականություն, տվյալների բազան կարող է տվյալներ բացահայտել յուրաքանչյուրին, ով ունի նախագծի anon բանալի [S1]: Next.js հավելվածներում սերվերի կողմից մատուցումը և հաճախորդի կողմից առբերումը պահանջում են նաև Supabase հաճախորդի զգույշ կարգավորում, որպեսզի օգտագործողի վավերացված համատեքստը հասնի տվյալների բազայի [S2] շերտին:

Բետոնե ամրացումներ

  • Միացնել RLS: Գործարկեք ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; յուրաքանչյուր հանրային աղյուսակի համար, որը պահում է հավելվածի տվյալները [S1]:
  • Սահմանեք քաղաքականություն. Ստեղծեք հատուկ քաղաքականություն, որը սահմանափակում է մուտքը ելնելով օգտագործողի նույնականացման կարգավիճակից, օրինակ՝ CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id);` [S1]:
  • Սերվերի կողմից անվտանգ հաճախորդներ. Next.js-ն օգտագործելիս պահեք սպասարկման դերի սպասարկող հաճախորդները միայն սերվերի համար և դեռևս կիրառեք սեփականության զտիչներ՝ նախքան տվյալները [S2] օգտվողներին վերադարձնելը:

Ինչպես է FixVibe-ն փորձարկում դրա համար

FixVibe-ն արդեն գործարկում է միայն կարդալու Supabase RLS ստուգումը baas.supabase-rls-ի միջոցով: Սկաները հայտնաբերում է Supabase նախագծի URL-ը և հանրային anon ստեղնը միևնույն ծագման JavaScript փաթեթներից, խնդրում է PostgREST-ին հանրային աղյուսակի մետատվյալների համար, և փորձում է միայն կարդալու սահմանափակ հնարավորություններ, ընտրում է հաստատել, թե արդյոք տվյալները ցուցադրվում են առանց օգտագործողի աշխատաշրջանի: Այն չի տեղադրում, թարմացնում, ջնջում կամ օգտագործում ծառայության դերի հավատարմագրերը: Ռեպո սկանավորումները կարող են նաև ավելի վաղ որսալ repo.supabase.missing-rls-ի միջոցով, որը դրոշակում է SQL միգրացիաները, որոնք ստեղծում են հանրային աղյուսակներ առանց ENABLE ROW LEVEL SECURITY-ի: