ຜົນກະທົບ
ຜູ້ໂຈມຕີສາມາດຂ້າມເຫດຜົນຂອງແອັບພລິເຄຊັນເພື່ອອ່ານ, ປັບປຸງ, ຫຼືລຶບບັນທຶກໃນຖານຂໍ້ມູນຖ້າ 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, ແລະການສະແກນລັບຊອກຫາການເປີດເຜີຍລະຫັດການບໍລິການກ່ອນທີ່ມັນຈະມາຮອດຕົວທ່ອງເວັບ.
