FixVibe
Covered by FixVibehigh

ການຮັກສາຄວາມປອດໄພ Next.js + Supabase: ການປ້ອງກັນຄວາມປອດໄພລະດັບແຖວ (RLS) ຂ້າມທາງ

ແອັບພລິເຄຊັນທີ່ສ້າງຂຶ້ນດ້ວຍ Next.js ແລະ Supabase ມັກຈະອີງໃສ່ຄວາມປອດໄພລະດັບແຖວ (RLS) ເພື່ອປົກປ້ອງຂໍ້ມູນ. ຄວາມລົ້ມເຫລວໃນການເປີດໃຊ້ RLS ຫຼືການກໍາຫນົດຄ່າຜິດພາດຂອງລູກຄ້າ Supabase ສາມາດນໍາໄປສູ່ການເປີດເຜີຍຖານຂໍ້ມູນຢ່າງເຕັມທີ່, ອະນຸຍາດໃຫ້ຜູ້ໃຊ້ທີ່ບໍ່ໄດ້ຮັບອະນຸຍາດອ່ານຫຼືແກ້ໄຂບັນທຶກທີ່ລະອຽດອ່ອນ.

CWE-284

ຜົນກະທົບ

ຜູ້ໂຈມຕີສາມາດຂ້າມເຫດຜົນຂອງແອັບພລິເຄຊັນເພື່ອອ່ານ, ປັບປຸງ, ຫຼືລຶບບັນທຶກໃນຖານຂໍ້ມູນຖ້າ Row Level Security (RLS) ບໍ່ໄດ້ຖືກບັງຄັບໃຊ້ຢ່າງຖືກຕ້ອງ [S1]. ນີ້ມັກຈະເຮັດໃຫ້ການເປີດເຜີຍຂໍ້ມູນສ່ວນບຸກຄົນ (PII) ຫຼືຂໍ້ມູນຄໍາຮ້ອງສະຫມັກທີ່ລະອຽດອ່ອນກັບຜູ້ໃຊ້ທີ່ມີພຽງແຕ່ເຂົ້າເຖິງລະຫັດ API ສາທາລະນະທີ່ບໍ່ເປີດເຜີຍຊື່.

ສາເຫດ

Supabase ໃຊ້ Postgres Row Level Security ເພື່ອຈັດການການເຂົ້າເຖິງຂໍ້ມູນໃນລະດັບຖານຂໍ້ມູນ, ເຊິ່ງເປັນພື້ນຖານສໍາລັບການຮັບປະກັນຂໍ້ມູນ [S1]. ໃນສະພາບແວດລ້ອມ Next.js, ຜູ້ພັດທະນາຕ້ອງສ້າງລູກຄ້າ Supabase ທີ່ຈັດການຄຸກກີ້ແລະເຊດຊັນຢ່າງຖືກຕ້ອງເພື່ອຮັກສາຄວາມປອດໄພໃນລະຫວ່າງການສະແດງຜົນຂ້າງເຊີບເວີ [S2]. ໂດຍປົກກະຕິແລ້ວ ຊ່ອງໂຫວ່ເກີດຂື້ນເມື່ອ:

  • ຕາຕະລາງຖືກສ້າງຂື້ນໂດຍບໍ່ມີການເປີດໃຊ້ RLS, ເຮັດໃຫ້ມັນສາມາດເຂົ້າເຖິງໄດ້ໂດຍຜ່ານລະຫັດສາທາລະນະ [S1].
  • ລູກຄ້າ Supabase ຖືກຕັ້ງຄ່າຜິດໃນ Next.js, ລົ້ມເຫລວໃນການຖ່າຍທອດໂທເຄັນການຢືນຢັນຜູ້ໃຊ້ຢ່າງຖືກຕ້ອງກັບຖານຂໍ້ມູນ [S2].
  • ຜູ້ພັດທະນາໃຊ້ລະຫັດ service_role ໂດຍບັງເອີນໃນລະຫັດຝ່າຍລູກຄ້າ, ເຊິ່ງຂ້າມນະໂຍບາຍ RLS ທັງໝົດ [S1].

ແກ້ໄຂຄອນກີດ

  • ເປີດໃຊ້ RLS: ໃຫ້ແນ່ໃຈວ່າ Row Level Security ຖືກເປີດໃຊ້ສໍາລັບທຸກໆຕາຕະລາງໃນຖານຂໍ້ມູນ Supabase ຂອງທ່ານ [S1].
  • ກໍານົດນະໂຍບາຍ: ສ້າງນະໂຍບາຍສະເພາະຂອງ Postgres ສໍາລັບ SELECT, INSERT, UPDATE, ແລະ DELETE ເພື່ອຈໍາກັດການເຂົ້າເຖິງໂດຍອີງໃສ່ UID ຜູ້ໃຊ້ ZXVIBETOKEN1ZXCV.
  • ໃຊ້ລູກຂ່າຍ SSR: ນຳໃຊ້ແພັກເກັດ @supabase/ssr ເພື່ອສ້າງລູກຄ້າໃນ Next.js ທີ່ຈັດການການພິສູດຢືນຢັນຂ້າງເຊີບເວີ ແລະການຄົງຕົວຂອງເຊດຊັນ [S2] ຢ່າງຖືກຕ້ອງ.

ວິທີການ FixVibe ທົດສອບສໍາລັບມັນ

FixVibe ກວມເອົາມັນແລ້ວຜ່ານການກວດສອບ app ແລະ repo. ໂມດູນ baas.supabase-rls passive ຄົ້ນພົບ Supabase URL ແລະຄູ່ anon-key ຈາກຊຸດ JavaScript ຕົ້ນສະບັບດຽວກັນ, ຖາມ PostgREST ສໍາລັບ metadata ຕາຕະລາງສາທາລະນະ, ແລະດໍາເນີນການເລືອກອ່ານແບບຈໍາກັດເພື່ອຢືນຢັນການເປີດເຜີຍຂໍ້ມູນທີ່ບໍ່ເປີດເຜີຍຕົວຕົນໂດຍບໍ່ມີການປ່ຽນແປງຂໍ້ມູນລູກຄ້າ. ການສະແກນ Repo ຍັງດໍາເນີນການ repo.supabase.missing-rls ເພື່ອລາຍງານການເຄື່ອນຍ້າຍ SQL ທີ່ສ້າງຕາຕະລາງສາທາລະນະໂດຍບໍ່ມີ ENABLE ROW LEVEL SECURITY, ແລະການສະແກນລັບຊອກຫາການເປີດເຜີຍລະຫັດການບໍລິການກ່ອນທີ່ມັນຈະມາຮອດຕົວທ່ອງເວັບ.