ਪ੍ਰਭਾਵ
ਕਤਾਰ ਪੱਧਰ ਸੁਰੱਖਿਆ (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 ਮਾਈਗ੍ਰੇਸ਼ਨ ਨੂੰ ਫਲੈਗ ਕਰਦਾ ਹੈ।
