प्रभाव
पङ्क्ति स्तर सुरक्षा (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 माइग्रेसनहरूलाई फ्ल्याग गर्दछ।
