FixVibe
Covered by FixVibehigh

Next.js + Supabase ਨੂੰ ਸੁਰੱਖਿਅਤ ਕਰਨਾ: ਰੋਅ ਲੈਵਲ ਸੁਰੱਖਿਆ (RLS) ਬਾਈਪਾਸ ਨੂੰ ਰੋਕਣਾ

Next.js ਅਤੇ Supabase ਨਾਲ ਬਣੀਆਂ ਐਪਲੀਕੇਸ਼ਨਾਂ ਅਕਸਰ ਡੇਟਾ ਦੀ ਸੁਰੱਖਿਆ ਲਈ ਰੋ ਲੈਵਲ ਸੁਰੱਖਿਆ (RLS) 'ਤੇ ਨਿਰਭਰ ਕਰਦੀਆਂ ਹਨ। RLS ਨੂੰ ਸਮਰੱਥ ਬਣਾਉਣ ਵਿੱਚ ਅਸਫਲਤਾ ਜਾਂ Supabase ਕਲਾਇੰਟ ਦੀ ਗਲਤ ਸੰਰਚਨਾ ਕਰਨ ਨਾਲ ਪੂਰਾ ਡਾਟਾਬੇਸ ਐਕਸਪੋਜ਼ਰ ਹੋ ਸਕਦਾ ਹੈ, ਜਿਸ ਨਾਲ ਅਣਅਧਿਕਾਰਤ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਸੰਵੇਦਨਸ਼ੀਲ ਰਿਕਾਰਡਾਂ ਨੂੰ ਪੜ੍ਹਨ ਜਾਂ ਸੋਧਣ ਦੀ ਆਗਿਆ ਮਿਲਦੀ ਹੈ।

CWE-284

ਪ੍ਰਭਾਵ

ਜੇਕਰ ਰੋ ਲੈਵਲ ਸਿਕਿਓਰਿਟੀ (RLS) [S1] ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਲਾਗੂ ਨਹੀਂ ਕੀਤਾ ਗਿਆ ਹੈ ਤਾਂ ਹਮਲਾਵਰ ਡੇਟਾਬੇਸ ਵਿੱਚ ਰਿਕਾਰਡਾਂ ਨੂੰ ਪੜ੍ਹਨ, ਅੱਪਡੇਟ ਕਰਨ ਜਾਂ ਮਿਟਾਉਣ ਲਈ ਐਪਲੀਕੇਸ਼ਨ ਤਰਕ ਨੂੰ ਬਾਈਪਾਸ ਕਰ ਸਕਦੇ ਹਨ। ਇਹ ਅਕਸਰ ਉਹਨਾਂ ਉਪਭੋਗਤਾਵਾਂ ਨੂੰ ਨਿੱਜੀ ਤੌਰ 'ਤੇ ਪਛਾਣਨ ਯੋਗ ਜਾਣਕਾਰੀ (PII) ਜਾਂ ਸੰਵੇਦਨਸ਼ੀਲ ਐਪਲੀਕੇਸ਼ਨ ਡੇਟਾ ਦੇ ਐਕਸਪੋਜਰ ਵਿੱਚ ਨਤੀਜਾ ਦਿੰਦਾ ਹੈ ਜਿਨ੍ਹਾਂ ਕੋਲ ਸਿਰਫ ਜਨਤਕ ਅਗਿਆਤ API ਕੁੰਜੀ ਤੱਕ ਪਹੁੰਚ ਹੁੰਦੀ ਹੈ।

ਮੂਲ ਕਾਰਨ

Supabase ਡਾਟਾਬੇਸ ਪੱਧਰ 'ਤੇ ਡਾਟਾ ਪਹੁੰਚ ਦਾ ਪ੍ਰਬੰਧਨ ਕਰਨ ਲਈ ਪੋਸਟਗ੍ਰੇਸ ਰੋ ਲੈਵਲ ਸੁਰੱਖਿਆ ਦੀ ਵਰਤੋਂ ਕਰਦਾ ਹੈ, ਜੋ [S1] ਡਾਟਾ ਸੁਰੱਖਿਅਤ ਕਰਨ ਲਈ ਬੁਨਿਆਦੀ ਹੈ। ਇੱਕ Next.js ਵਾਤਾਵਰਣ ਵਿੱਚ, ਡਿਵੈਲਪਰਾਂ ਨੂੰ ਇੱਕ Supabase ਕਲਾਇੰਟ ਬਣਾਉਣਾ ਚਾਹੀਦਾ ਹੈ ਜੋ ਸਰਵਰ-ਸਾਈਡ ਰੈਂਡਰਿੰਗ [S2] ਦੌਰਾਨ ਸੁਰੱਖਿਆ ਬਣਾਈ ਰੱਖਣ ਲਈ ਕੂਕੀਜ਼ ਅਤੇ ਸੈਸ਼ਨਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਹੈਂਡਲ ਕਰਦਾ ਹੈ। ਕਮਜ਼ੋਰੀਆਂ ਆਮ ਤੌਰ 'ਤੇ ਉਦੋਂ ਪੈਦਾ ਹੁੰਦੀਆਂ ਹਨ ਜਦੋਂ:

  • ਟੇਬਲਾਂ ਨੂੰ RLS ਸਮਰਥਿਤ ਕੀਤੇ ਬਿਨਾਂ ਬਣਾਇਆ ਗਿਆ ਹੈ, ਉਹਨਾਂ ਨੂੰ ਜਨਤਕ anon ਕੁੰਜੀ [S1] ਦੁਆਰਾ ਪਹੁੰਚਯੋਗ ਬਣਾਉਂਦਾ ਹੈ।
  • Supabase ਕਲਾਇੰਟ ਨੂੰ Next.js ਵਿੱਚ ਗਲਤ ਸੰਰਚਨਾ ਕੀਤਾ ਗਿਆ ਹੈ, [S2] ਡੇਟਾਬੇਸ ਨੂੰ ਉਪਭੋਗਤਾ ਪ੍ਰਮਾਣੀਕਰਨ ਟੋਕਨਾਂ ਨੂੰ ਸਹੀ ਢੰਗ ਨਾਲ ਪਾਸ ਕਰਨ ਵਿੱਚ ਅਸਫਲ ਰਿਹਾ ਹੈ।
  • ਡਿਵੈਲਪਰ ਗਲਤੀ ਨਾਲ ਕਲਾਇੰਟ-ਸਾਈਡ ਕੋਡ ਵਿੱਚ service_role ਕੁੰਜੀ ਦੀ ਵਰਤੋਂ ਕਰਦੇ ਹਨ, ਜੋ ਸਾਰੀਆਂ RLS ਨੀਤੀਆਂ [S1] ਨੂੰ ਬਾਈਪਾਸ ਕਰਦੀ ਹੈ।

ਕੰਕਰੀਟ ਫਿਕਸ

  • RLS ਨੂੰ ਸਮਰੱਥ ਬਣਾਓ: ਯਕੀਨੀ ਬਣਾਓ ਕਿ ਤੁਹਾਡੇ Supabase ਡੇਟਾਬੇਸ [S1] ਵਿੱਚ ਹਰੇਕ ਸਾਰਣੀ ਲਈ ਕਤਾਰ ਪੱਧਰ ਦੀ ਸੁਰੱਖਿਆ ਸਮਰਥਿਤ ਹੈ।
  • ਨੀਤੀਆਂ ਨੂੰ ਪਰਿਭਾਸ਼ਿਤ ਕਰੋ: ਯੂਜ਼ਰ ਦੀ ਪਹੁੰਚ ਨੂੰ ਸੀਮਤ ਕਰਨ ਲਈ SELECT, INSERT, UPDATE, ਅਤੇ DELETE ਓਪਰੇਸ਼ਨਾਂ ਲਈ ਖਾਸ ਪੋਸਟਗ੍ਰੇਸ ਨੀਤੀਆਂ ਬਣਾਓ। [S1].
  • SSR ਕਲਾਇੰਟਸ ਦੀ ਵਰਤੋਂ ਕਰੋ: Next.js ਵਿੱਚ ਕਲਾਇੰਟ ਬਣਾਉਣ ਲਈ @supabase/ssr ਪੈਕੇਜ ਨੂੰ ਲਾਗੂ ਕਰੋ ਜੋ ਸਰਵਰ-ਸਾਈਡ ਪ੍ਰਮਾਣਿਕਤਾ ਅਤੇ ਸੈਸ਼ਨ ਨਿਰੰਤਰਤਾ [S2] ਦਾ ਸਹੀ ਢੰਗ ਨਾਲ ਪ੍ਰਬੰਧਨ ਕਰਦਾ ਹੈ।

FixVibe ਇਸਦੇ ਲਈ ਕਿਵੇਂ ਟੈਸਟ ਕਰਦਾ ਹੈ

FixVibe ਇਸ ਨੂੰ ਪਹਿਲਾਂ ਹੀ ਤੈਨਾਤ-ਐਪ ਅਤੇ ਰੈਪੋ ਜਾਂਚਾਂ ਰਾਹੀਂ ਕਵਰ ਕਰਦਾ ਹੈ। ਪੈਸਿਵ baas.supabase-rls ਮੋਡੀਊਲ Supabase URL ਅਤੇ ਸਮਾਨ-ਮੂਲ JavaScript ਬੰਡਲਾਂ ਤੋਂ ਅਨੋਨ-ਕੁੰਜੀ ਜੋੜਿਆਂ ਦੀ ਖੋਜ ਕਰਦਾ ਹੈ, ਜਨਤਕ ਟੇਬਲ ਮੈਟਾਡੇਟਾ ਲਈ PostgREST ਨੂੰ ਪੁੱਛਦਾ ਹੈ, ਅਤੇ ਅਗਿਆਤ ਡੇਟਾ ਐਕਸਪੋਜਰ ਦੇ ਗਾਹਕ ਡੇਟਾ ਦੀ ਪੁਸ਼ਟੀ ਕਰਨ ਲਈ ਸੀਮਤ ਰੀਡ-ਓਨਲੀ ਚੋਣ ਕਰਦਾ ਹੈ। ਰੈਪੋ ਸਕੈਨ ਵੀ repo.supabase.missing-rls ਨੂੰ ਫਲੈਗ ਕਰਨ ਲਈ SQL ਮਾਈਗ੍ਰੇਸ਼ਨ ਨੂੰ ਚਲਾਉਂਦੇ ਹਨ ਜੋ ENABLE ROW LEVEL SECURITY ਤੋਂ ਬਿਨਾਂ ਜਨਤਕ ਟੇਬਲ ਬਣਾਉਂਦੇ ਹਨ, ਅਤੇ ਬ੍ਰਾਊਜ਼ਰ ਤੱਕ ਪਹੁੰਚਣ ਤੋਂ ਪਹਿਲਾਂ ਗੁਪਤ ਸਕੈਨ ਸਰਵਿਸ-ਰੋਲ ਕੁੰਜੀ ਦੇ ਐਕਸਪੋਜਰ ਦੀ ਭਾਲ ਕਰਦੇ ਹਨ।