FixVibe
Covered by FixVibehigh

Next.js + Supabase'nin Güvenliğini Sağlama: Satır Düzeyinde Güvenlik (RLS) Baypaslarını Önleme

Next.js ve Supabase ile oluşturulan uygulamalar, verileri korumak için genellikle Satır Düzeyinde Güvenlik'e (RLS) güvenir. RLS'nin etkinleştirilmemesi veya Supabase istemcisinin yanlış yapılandırılması, veritabanının tamamının açığa çıkmasına yol açarak yetkisiz kullanıcıların hassas kayıtları okumasına veya değiştirmesine olanak tanıyabilir.

CWE-284

Etki

Satır Düzeyinde Güvenlik (RLS) [S1] düzgün şekilde uygulanmazsa saldırganlar veritabanındaki kayıtları okumak, güncellemek veya silmek için uygulama mantığını atlayabilir. Bu genellikle Kişisel Tanımlayıcı Bilgilerin (PII) veya hassas uygulama verilerinin yalnızca genel anonim API anahtarına erişimi olan kullanıcılara ifşa edilmesiyle sonuçlanır.

Temel Neden

Supabase, [S1] verilerinin güvenliğini sağlamak için temel olan veritabanı düzeyinde veri erişimini yönetmek için Postgres Satır Düzeyi Güvenliği'ni kullanır. Bir Next.js ortamında geliştiricilerin, sunucu tarafında [S2] oluşturma sırasında güvenliği korumak için tanımlama bilgilerini ve oturumları doğru şekilde işleyen bir Supabase istemcisi oluşturması gerekir. Güvenlik açıkları genellikle şu durumlarda ortaya çıkar:

  • Tablolar RLS etkinleştirilmeden oluşturulur ve bu tablolara [S1] genel anon anahtarı aracılığıyla erişilebilir hale gelir.
  • Supabase istemcisi, Next.js'de yanlış yapılandırılmıştır ve kullanıcı kimlik doğrulama belirteçlerini [S2] veritabanına düzgün şekilde aktaramamaktadır.
  • Geliştiriciler, istemci tarafı kodunda yanlışlıkla service_role anahtarını kullanır; bu, tüm RLS [S1] politikalarını atlar.

Beton Düzeltmeleri

  • RLS'yi etkinleştirin: Supabase veritabanınızdaki [S1]'deki her tablo için Satır Düzeyinde Güvenliğin etkinleştirildiğinden emin olun.
  • Politikaları Tanımlayın: Kullanıcının UID [S1]'sine göre erişimi kısıtlamak amacıyla SELECT, INSERT, UPDATE ve DELETE işlemleri için belirli Postgres politikaları oluşturun.
  • SSR İstemcilerini kullanın: Next.js'de sunucu tarafı kimlik doğrulamasını ve [S2] oturum kalıcılığını doğru şekilde yöneten istemciler oluşturmak için @supabase/ssr paketini uygulayın.

FixVibe bunu nasıl test ediyor?

FixVibe, konuşlandırılan uygulama ve repo kontrolleri yoluyla bunu zaten kapsamaktadır. Pasif baas.supabase-rls modülü, Supabase URL'sini ve aynı kaynaklı JavaScript paketlerinden anonim anahtar çiftlerini keşfeder, PostgREST'ten genel tablo meta verilerini ister ve müşteri verilerini değiştirmeden anonim verilerin açığa çıkmasını onaylamak için sınırlı salt okunur seçimler gerçekleştirir. Repo taramaları ayrıca ENABLE ROW LEVEL SECURITY olmadan genel tablolar oluşturan SQL geçişlerini işaretlemek için repo.supabase.missing-rls'yi çalıştırır ve gizli taramalar, tarayıcıya ulaşmadan önce hizmet rolü anahtarının açığa çıkmasını arar.