FixVibe
Covered by FixVibehigh

हराइरहेको Supabase पङ्क्ति स्तर सुरक्षा (RLS) मार्फत अनधिकृत डेटा पहुँच

Supabase-समर्थित अनुप्रयोगहरूमा, डेटा सुरक्षा पङ्क्ति स्तर सुरक्षा (RLS) मा निर्भर गर्दछ। यदि RLS स्पष्ट रूपमा सक्षम गरिएको छैन र नीतिहरूसँग कन्फिगर गरिएको छैन भने, सार्वजनिक बेनामी कुञ्जीको साथ कुनै पनि प्रयोगकर्ताले सम्पूर्ण डाटाबेसमा डाटा पढ्न, अद्यावधिक गर्न वा मेटाउन सक्छ। Next.js वातावरणमा यो विशेष गरी महत्वपूर्ण छ जहाँ Supabase क्लाइन्ट प्रायः सार्वजनिक API कुञ्जीसँग प्रारम्भ गरिन्छ।

CWE-284

प्रभाव

पङ्क्ति स्तर सुरक्षा (RLS) लागू गर्न असफल हुँदा सार्वजनिक तालिकाहरू एनोन सीमा [S1] मार्फत खुला हुँदा Supabase डाटाबेसबाट डाटा क्वेरी गर्न अप्रमाणित आक्रमणकारीहरूलाई अनुमति दिन्छ। किनकी Next.js अनुप्रयोगहरूले सामान्यतया Supabase anon कुञ्जीलाई क्लाइन्ट-साइड कोडमा पर्दाफास गर्दछ, आक्रमणकारीले यो कुञ्जीलाई प्रत्यक्ष REST API गर्न प्रयोग गर्न सक्छ र अनुप्रयोगमा कलहरू पहुँच गरेर डाटा पहुँच गर्न सक्छ। संवेदनशील प्रयोगकर्ता जानकारी [S2]।

मूल कारण

पूर्वनिर्धारित रूपमा, Supabase मा Postgres तालिकाहरूलाई सार्वजनिक पहुँच [S1] रोक्न पङ्क्ति स्तर सुरक्षाको स्पष्ट सक्रियता चाहिन्छ। जब एक विकासकर्ताले तालिका सिर्जना गर्दछ तर RLS सक्षम गर्न बिर्सन्छ वा प्रतिबन्धात्मक नीतिहरू परिभाषित गर्न असफल हुन्छ, डाटाबेसले परियोजनाको anon कुञ्जी [S1] भएको जो कोहीलाई डाटा खुलाउन सक्छ। Next.js अनुप्रयोगहरूमा, सर्भर-साइड रेन्डरिङ र क्लाइन्ट-साइड फेचिङलाई पनि सावधान Supabase क्लाइन्ट सेटअप चाहिन्छ त्यसैले प्रमाणीकृत प्रयोगकर्ता सन्दर्भ डाटाबेस तह [S2] मा पुग्छ।

कंक्रीट फिक्सहरू

  • RLS सक्षम गर्नुहोस्: एप डेटा [S1] भण्डारण गर्ने हरेक सार्वजनिक तालिकाको लागि ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; कार्यान्वयन गर्नुहोस्।
  • नीतिहरू परिभाषित गर्नुहोस्: विशिष्ट नीतिहरू सिर्जना गर्नुहोस् जसले प्रयोगकर्ताको प्रमाणीकरण स्थितिको आधारमा पहुँच प्रतिबन्धित गर्दछ, जस्तै 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 र सार्वजनिक anon कुञ्जी पत्ता लगाउँदछ, सार्वजनिक तालिका मेटाडेटाको लागि PostgREST सोध्छ, र प्रयोगकर्ता सत्र बिना डाटा खुला भएको छ कि छैन भनेर पुष्टि गर्न सीमित पढ्न-मात्र चयन गर्ने प्रयास गर्दछ। यसले सेवा-भूमिका प्रमाणहरू सम्मिलित, अद्यावधिक, मेटाउने वा प्रयोग गर्दैन। रेपो स्क्यानहरूले यसलाई repo.supabase.missing-rls मार्फत पहिले पनि समात्न सक्छ, जसले ENABLE ROW LEVEL SECURITY बिना सार्वजनिक तालिकाहरू सिर्जना गर्ने SQL माइग्रेसनहरूलाई फ्ल्याग गर्दछ।