// 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.
- 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.
- 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.
- 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/webppou bokè-imaj sèlman. Pa janm pèmèttext/html,application/javascript, oswaimage/svg+xmlnan yon bokè kontni-itilizatè — yo egzekite nan navigatè a lè yo sèvi via URL siyen. - 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-assetspi fasil pou bloke pase yon bokè mèlanje. - 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.
- Konfime RLS aktive sou storage.objects.
SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects';dwe retounentrue. Supabase aktive li pa default sou nouvo pwojè; verifye yo pa dezaktive li. - 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 itilizestorage.foldername()pou ekstrè pwopriyetè a soti nan chemen an. - 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è. - 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.
- 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
403oswa404, pa janm200.
-- 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.
- 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 tankoufile-type(Node) oswa bay-majik sniffing. Yon atakè kapab reklameContent-Type: image/jpegsou yon dosye ki reyèlman yon payload poliglòt HTML / JavaScript. - Retire meta-done EXIF nan imaj uploads. EXIF kapab gen kowòdone GPS, nimewo seri aparèy, ak orodataj. Itilize
sharpak.withMetadata(false)oswaexif-parserpou retire anvan estokaj. - Rejte SVG ki gen tag
scriptoswa manyèonload. SVG se XML — epi anpil aplikasyon jenere pa IA pèmèt uploads SVG kòm "jis yon imaj." ItilizeDOMPurifybò-sèvè oswa refize uploads SVG nèt. - 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.
- Default ekspirasyon URL-siyen nan 1 èdtan oswa mwens. SDK JS Supabase
createSignedUrl(path, expiresIn)pran segonn. Pa janm itilize valè tankou31536000(yon ane) — URL la vin yon lyen pèmanan semi-piblik. - 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.
- 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. - Itilize opsyon
downloadAslè w ap sèvi dosye uploads pa itilizatè.createSignedUrl(path, expiresIn, { download: '.jpg' })fòse yon antètContent-Disposition: attachmentkidonk 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.
- 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.
- 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ò. - 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.
- Lanse yon eskanè FixVibe chak mwa. Tcheke
baas.supabase-storage-publicsond bokè ki reponn akGET+LISTanonim. 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.
