FixVibe
Covered by FixVibehigh

Next.js + Supabase-ийг хамгаалах: Мөрийн түвшний аюулгүй байдлыг (RLS) тойрч гарахаас сэргийлэх

Next.js болон Supabase-ээр бүтээгдсэн програмууд нь өгөгдлийг хамгаалахын тулд Row Level Security (RLS) дээр тулгуурладаг. RLS-г идэвхжүүлээгүй эсвэл Supabase клиентийг буруу тохируулсан нь мэдээллийн санд бүрэн өртөхөд хүргэж, зөвшөөрөлгүй хэрэглэгчдэд эмзэг бүртгэлийг унших, өөрчлөх боломжийг олгоно.

CWE-284

Нөлөөлөл

Мөрийн түвшний хамгаалалт (RLS) [S1] зохих ёсоор хэрэгжээгүй тохиолдолд халдагчид мэдээллийн сангийн бүртгэлийг унших, шинэчлэх, устгахын тулд програмын логикийг тойрч гарах боломжтой. Энэ нь ихэвчлэн нэрээ нууцалсан API түлхүүрт хандах эрхтэй хэрэглэгчдэд хувийн таних мэдээлэл (PII) эсвэл эмзэг програмын өгөгдөлд өртөхөд хүргэдэг.

Үндсэн шалтгаан

Supabase нь Postgres Row Level Security-ийг мэдээллийн баазын түвшинд өгөгдлийн хандалтыг удирдахад ашигладаг бөгөөд энэ нь [S1] өгөгдлийг хамгаалахад чухал үүрэгтэй. Next.js орчинд хөгжүүлэгчид [S2]-г сервер талд үзүүлэх үед аюулгүй байдлыг хангах үүднээс күүки болон сешнүүдийг зөв зохицуулдаг Supabase клиентийг үүсгэх ёстой. Эмзэг байдал нь ихэвчлэн дараах тохиолдолд үүсдэг.

  • Хүснэгтүүдийг RLS-г идэвхжүүлэхгүйгээр үүсгэсэн тул тэдгээрийг [S1] нийтийн анон түлхүүрээр дамжуулан авах боломжтой.
  • Supabase клиент нь Next.js-д буруу тохируулагдсан тул хэрэглэгчийн баталгаажуулалтын токенуудыг [S2] мэдээллийн сан руу зөв дамжуулж чадаагүй байна.
  • Хөгжүүлэгчид service_role түлхүүрийг үйлчлүүлэгчийн кодонд санамсаргүйгээр ашигладаг бөгөөд энэ нь RLS бүх [S1] бодлогыг тойрч гардаг.

Бетон засвар

  • RLS-г идэвхжүүлэх: Supabase мэдээллийн баазын [S1] дахь хүснэгт бүрт мөрийн түвшний хамгаалалт идэвхжсэн эсэхийг шалгана уу.
  • Бодлого тодорхойлох: UID-д тулгуурлан хэрэглэгчийн хандалтыг хязгаарлахын тулд SELECT, INSERT, UPDATE, DELETE-д зориулсан тусгай Postgres бодлогыг үүсгэнэ үү. [S1].
  • SSR Clients ашиглах: @supabase/ssr багцыг ашиглан Next.js дотор сервер талын нэвтрэлт танилт болон сессийн тогтвортой байдлыг [S2]-г зөв удирддаг клиентүүдийг үүсгэнэ үү.

FixVibe үүнийг хэрхэн туршиж үздэг

FixVibe үүнийг аль хэдийн суулгасан програм болон репо шалгалтаар хамардаг. Идэвхгүй baas.supabase-rls модуль нь ижил гарал үүсэлтэй JavaScript багцаас Supabase URL болон анон түлхүүр хосуудыг олж илрүүлж, PostgREST-ээс нийтийн хүснэгтийн мета өгөгдлийг асууж, хэрэглэгчийн өгөгдлийг мутаци хийхгүйгээр нэргүй өгөгдөлд өртөхийг баталгаажуулахын тулд зөвхөн унших боломжтой сонголтуудыг гүйцэтгэдэг. Репо сканнер нь ENABLE ROW LEVEL SECURITYгүйгээр нийтийн хүснэгтүүдийг үүсгэдэг SQL шилжилтийг дарцаглахын тулд repo.supabase.missing-rls-г ажиллуулдаг бөгөөд нууц сканнерууд нь хөтөч дээр хүрэхээс өмнө үйлчилгээний үүрэгт хамаарах түлхүүрийг хайдаг.