FixVibe

// docs / baas security / supabase storage

Lis tcheke sekirite bokè depo Supabase: 22 eleman

Depo Supabase se yon koche fen otou yon bokè konpatib-S3 plis menm modèl Sekirite nan nivo ranje a ke baz done a. Sa vle di menm pyèj RLS ki afekte tab afekte aksè dosye — epi kèk espesifik-depo ki parèt lè zouti kodaj IA kable uploads. Lis tcheke sa a se 22 eleman atravè senk seksyon: konfigirasyon bokè, politik RLS, validasyon upload, URL siyen, ak ijyèn operasyonèl. Chak verifyab nan mwens pase 15 minit.

Chak eleman anba esansyèl. Pou mekanik RLS ki anba a, gade Eskanè RLS Supabase. Pou klas ekspozisyon-kle akote depo a, gade Kle service-role Supabase ekspoze nan JavaScript.

Konfigirasyon bokè

Kòmanse ak bon default yo. Yon bokè move konfigire pèdi dosye kit RLS ou kòrèk oswa non.

  1. Default chak bokè kòm prive. Nan Supabase Dashboard → Storage → Buckets, mete switch Public bucket a deyò sof si ou gen yon rezon eksplisit (assets maketing, avatar piblik san PII). Bokè piblik kontoune RLS pou operasyon lekti — nenpòt moun ki gen non bokè a kapab liste ak telechaje.
  2. Mete yon limit gwosè dosye di sou chak bokè. Dashboard → Bucket settings → File size limit. 50 MB se yon default rezonab pou uploads itilizatè; ogmante li dèlibèreman pou ka itilizasyon videyo / gwo dosye. San yon limit, yon sèl upload move kapab fini kota depo ou oswa lajè bann mwa ou.
  3. Restriksyon tip MIME ki pèmèt pa bokè. Lis tip MIME ki pèmèt — lis-pèmèt eksplisit, pa lis-bloke. image/jpeg, image/png, image/webp pou bokè-imaj sèlman. Pa janm pèmèt text/html, application/javascript, oswa image/svg+xml nan yon bokè kontni-itilizatè — yo egzekite nan navigatè a lè yo sèvi via URL siyen.
  4. Itilize yon bokè pa tip kontni, pa yon bokè pataje. Paramèt-pa-bokè (gwosè, tip MIME, politik RLS) se granilarite ou genyen. Yon bokè user-avatars, yon bokè document-uploads, ak yon bokè public-assets pi fasil pou bloke pase yon bokè mèlanje.
  5. Verifye konfigirasyon CORS si frontend uploads. Si itilizatè uploads dirèkteman soti nan navigatè a nan yon URL siyen, CORS bokè a dwe liste orijin pwodiksyon ou. * aksèpte pou bokè piblik sèlman — pa janm pou bokè ki gen PII itilizatè.

Politik RLS sou storage.objects

Depo Supabase estoke meta-done dosye nan tab storage.objects la. RLS sou tab sa a kontwole ki moun ki kapab li, uploads, mete ajou, oswa efase dosye. San RLS, drapo piblik/prive bokè a se sèl pwoteksyon ou.

  1. Konfime RLS aktive sou storage.objects. SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects'; dwe retounen true. Supabase aktive li pa default sou nouvo pwojè; verifye yo pa dezaktive li.
  2. Ekri yon politik SELECT ki pòte sou auth.uid() pou bokè prive. CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Konvansyon an se estoke dosye anba [user-id]/[filename] epi itilize storage.foldername() pou ekstrè pwopriyetè a soti nan chemen an.
  3. Ekri yon politik INSERT ki ranfòse menm konvansyon chemen an. CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. San WITH CHECK, yon itilizatè otantifye kapab uploads nan dosye yon lòt itilizatè.
  4. Ajoute politik UPDATE ak DELETE si aplikasyon ou sipòte edisyon oswa efase dosye. Chak kòmand bezwen pwòp politik li. Sote DELETE vle di itilizatè otantifye pa ka retire pwòp dosye yo; sote UPDATE vle di echèk re-ekriti dosye an silans.
  5. Teste aksè kwa-itilizatè nan de sesyon navigatè. Konekte kòm Itilizatè A, uploads yon dosye, kopi chemen an. Konekte kòm Itilizatè B nan yon lòt navigatè, eseye chèche dosye a via REST API. Repons lan dwe 403 oswa 404, pa janm 200.
sql
-- Confirm RLS on storage.objects
SELECT rowsecurity
FROM   pg_tables
WHERE  schemaname = 'storage' AND tablename = 'objects';

-- SELECT policy: scope reads to the owning user's folder.
CREATE POLICY "users_read_own_files"
  ON storage.objects
  FOR SELECT
  USING (auth.uid()::text = (storage.foldername(name))[1]);

-- INSERT policy: enforce the [user-id]/[filename] path convention.
CREATE POLICY "users_upload_own"
  ON storage.objects
  FOR INSERT
  WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);

Validasyon upload

Valide chak upload bò-sèvè, menm lè bokè a gen kontrent MIME ak gwosè. Zouti kodaj IA jenere validasyon kliyan-sèlman pa default; sa pa pwoteje anyen.

  1. Re-tcheke tip MIME bò-sèvè soti nan reyèl bay yo nan dosye a, pa nan antèt Content-Type. Itilize yon bibliyotèk tankou file-type (Node) oswa bay-majik sniffing. Yon atakè kapab reklame Content-Type: image/jpeg sou yon dosye ki reyèlman yon payload poliglòt HTML / JavaScript.
  2. Retire meta-done EXIF nan imaj uploads. EXIF kapab gen kowòdone GPS, nimewo seri aparèy, ak orodataj. Itilize sharp ak .withMetadata(false) oswa exif-parser pou retire anvan estokaj.
  3. Rejte SVG ki gen tag script oswa manyè onload. SVG se XML — epi anpil aplikasyon jenere pa IA pèmèt uploads SVG kòm "jis yon imaj." Itilize DOMPurify bò-sèvè oswa refize uploads SVG nèt.
  4. Itilize non dosye detèministik, ki pa kapab devine. Pa konsève non dosye orijinal la. Itilize yon UUID oswa yon hash nan kontni dosye a. Non orijinal koule ("passport_scan_2024_01_15.jpg") epi non previzib pèmèt enimerasyon.

URL siyen

URL siyen yo se kijan kliyan aksè bokè prive. Ekspirasyon an, pòte bokè a, ak sa ki log enpòtan.

  1. Default ekspirasyon URL-siyen nan 1 èdtan oswa mwens. SDK JS Supabase createSignedUrl(path, expiresIn) pran segonn. Pa janm itilize valè tankou 31536000 (yon ane) — URL la vin yon lyen pèmanan semi-piblik.
  2. Pa janm estoke URL siyen nan baz done ou. Jenere nouvo bò-sèvè sou chak demand. Yon URL siyen estoke ak yon ekspirasyon 1 ane ki koule via yon dump baz done bay aksè alontèm.
  3. Log jenerasyon URL siyen, pa sèlman uploads dosye. Si ou sispèk yon konpwomi pita, ou bezwen konnen ki moun ki te jenere ki URL ak ki lè. Log auth.uid() + bokè + chemen objè + orodataj.
  4. Itilize opsyon downloadAs lè w ap sèvi dosye uploads pa itilizatè. createSignedUrl(path, expiresIn, { download: '.jpg' }) fòse yon antèt Content-Disposition: attachment kidonk dosye a telechaje olye li parèt — defèt klas egzekisyon HTML / SVG / HTML-nan-PDF.

Ijyèn operasyonèl

Konfigirasyon depo a derive sou tan. Kat eleman operasyonèl sa yo kenbe sifas la sere.

  1. Odit bokè trimès. Dashboard → Storage → Buckets. Konfime eta piblik/prive ak lis tip-MIME koresponn ak sa aplikasyon an ap tann. Bokè kreye "tanporèman" vin pèmanan si pèsòn pa retire yo.
  2. Monitè operasyon lis anonim. Logs depo (Dashboard → Logs → Storage) anrejistre demand LIST. Yon pik nan demand lis anonim kont yon bokè prive vle di yon moun ap sond li depi deyò.
  3. Mete yon politik retansyon pou uploads efemè. Bokè tanporè (apèsi imaj, bouyon uploads) ta dwe oto-efase apre 24-72 èdtan via yon fonksyon pwograme. Retansyon endefini se yon responsablite anba obligasyon minimizasyon-done GDPR / CCPA.
  4. Lanse yon eskanè FixVibe chak mwa. Tcheke baas.supabase-storage-public sond bokè ki reponn ak GET + LIST anonim. Nouvo bokè vin ajoute; ansyen yo chanje vizibilite — sèlman eskanè kontinyèl kenbe deriv la.

Etap pwochèn

Lanse yon eskanè FixVibe kont URL pwodiksyon ou — lis depo anonim parèt anba baas.supabase-storage-public. Akouple lis tcheke sa a ak Eskanè RLS Supabase pou kouch tab la ak Kle service-role Supabase ekspoze nan JavaScript pou adjasans ekspozisyon-kle. Pou move konfigirasyon depo atravè lòt founisè BaaS yo, gade Eskanè move konfigirasyon BaaS.

// eskane sifas baas ou

Twouve tab ki louvri a anvan yon lòt moun fè li.

Mete yon URL pwodiksyon. FixVibe enimere founisè BaaS aplikasyon ou a pale ak yo, anprent pwen-fen piblik yo, epi rapòte sa yon kliyan ki pa otantifye kapab li oswa ekri. Gratis, san enstalasyon, san kat.

  • Nivo gratis — 3 eskanè / mwa, san kat enskripsyon.
  • Anprent BaaS pasif — pa bezwen verifikasyon domèn.
  • Supabase, Firebase, Clerk, Auth0, Appwrite, ak plis.
  • Pwòp ranjman IA sou chak dekouvèt — kole tounen nan Cursor / Claude Code.
Lanse yon eskanè BaaS gratis

pa gen enskripsyon ki nesesè

Lis tcheke sekirite bokè depo Supabase: 22 eleman — Docs · FixVibe