અસર
પંક્તિ સ્તરની સુરક્ષા (RLS) ને અમલમાં મૂકવાની નિષ્ફળતા બિનઅધિકૃત હુમલાખોરોને Supabase ડેટાબેઝમાંથી ડેટાની ક્વેરી કરવાની મંજૂરી આપે છે જ્યારે જાહેર કોષ્ટકો એનોન બાઉન્ડ્રી [S1] દ્વારા ખુલ્લા હોય છે. કારણ કે Next.js એપ્લીકેશન સામાન્ય રીતે Supabase anon કીને ક્લાયંટ-સાઇડ કોડમાં એક્સપોઝ કરે છે, હુમલાખોર આ કીનો ઉપયોગ સીધો REST API કરવા માટે કરી શકે છે. સંવેદનશીલ વપરાશકર્તા માહિતી [S2].
મૂળ કારણ
ડિફૉલ્ટ રૂપે, Supabase માં પોસ્ટગ્રેસ કોષ્ટકોને જાહેર ઍક્સેસ [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 પહેલેથી જ baas.supabase-rls દ્વારા ફક્ત વાંચવા માટે Supabase RLS ચેક ચલાવે છે. સ્કેનર સમાન મૂળના JavaScript બંડલ્સમાંથી Supabase પ્રોજેક્ટ URL અને સાર્વજનિક એનોન કી શોધે છે, પોસ્ટગ્રેસ્ટને સાર્વજનિક ટેબલ મેટાડેટા માટે પૂછે છે અને વપરાશકર્તા સત્ર વિના ડેટા એક્સપોઝ થાય છે કે કેમ તેની પુષ્ટિ કરવા માટે મર્યાદિત વાંચન માટે પસંદ કરવાનો પ્રયાસ કરે છે. તે સેવા-ભૂમિકા ઓળખપત્રો દાખલ, અપડેટ, કાઢી નાખવા અથવા ઉપયોગ કરતું નથી. રેપો સ્કેન પણ repo.supabase.missing-rls દ્વારા અગાઉ આને પકડી શકે છે, જે ENABLE ROW LEVEL SECURITY વગર સાર્વજનિક કોષ્ટકો બનાવતા SQL સ્થાનાંતરણને ફ્લેગ કરે છે.
