Ազդեցություն
Տողերի մակարդակի անվտանգությունը (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-ի:
