// docs / baas security / supabase storage
Supabase storage bucket jark'aqaña checklist: 22 items
Supabase Storage mä k'akhu wrapper S3-compatible bucket ukat pachpa Row-Level Security modelo base de datus ukamp. Ukax tablanak influencianak storage-específicas pä kimsa IA codificación yänakax uploads catayaña uñstayi. Aka checklist 22 items phisqa secciones: bucket configuración, RLS políticas, upload validación, firmadas URLs, ukat operacional limpia. Sapa qhana mä 15 minutos manqhan verificable.
Sapa aksa item utt'ataw. RLS mecánica fundamento Supabase RLS escáner ulla. Storage jak'an llawi-qhanstayata clase, Supabase service role llawi JavaScript ukan qhanstayata ulla.
Bucket configuración
Wakisita defectos ukamp qalltaña. Mä mala configurada bucket archivunak jaltayañkani RLS chiqäkpan ukasa.
- Sapa bucket defecto privadot uchaña. Supabase Dashboard → Storage → Buckets ukan, Público bucket toggle apaya kun explícito amtawi jan utjkpan (marketing assets, público avatars jan PII). Público buckets RLS ullañ operación saltayi — khitis bucket suti yatkaspa list ukat download lurpan.
- Mä jach'a archivu jiwit'awi sapa bucket uchaña. Dashboard → Bucket configuración → Archivu jiwit'awi. 50 MB mä wakisita defecto usuariu uploads ukatakwa; jach'aru deliberadamente video / jach'a-archivu apnaqaña. Jan jiwit'awini, mä sapa nuwa upload storage cuota jan ukax phaxsi ancho banda jist'antayaspa.
- Permitita MIME tipos sapa bucket ukan jark'aqaña. Permitita MIME tipos lista — explícita permitilista, janit bloqueolista.
image/jpeg,image/png,image/webpmä imagen-ukak buckets ukataki. Janipunitext/html,application/javascript, jan ukaximage/svg+xmlmä usuariu-contenido bucket ukan permitiña — apnaqi navegadoran apkat firmada URL ukamp. - Mä bucket sapa contenido tipo uchaña, janit mä compartit bucket. Sapa-bucket configuración (jiwit'awi, MIME tipos, RLS políticas) granularidad atxiri. Mä
user-avatarsbucket, mädocument-uploadsbucket, ukat mäpublic-assetsbucket mä mezcla bucket ukat juk'amp jist'antañataki suma. - CORS configuración verifikaña frontend uploads ukan. Usuarionakax mä firmada URL ukar navegadoramat directo apkatkpan, bucket CORS production origen apkatañapa.
*público buckets ukatak phuqayatawa — janipuni usuariu PII apkatat buckets ukan.
RLS políticas storage.objects ukan
Supabase Storage archivu metadatos storage.objects tablan apsuyi. RLS uka tablan kun ullaña, upload, update, jan ukax delete archivunak. Jan RLS-ni, bucket público/privado bandera mä ukak jark'aqama.
- RLS storage.objects ukan utt'ata confirmaña.
SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects';truekuti munay. Supabase machaq proyectoman defecto utt'ayi; verifikaña jan deshabilitatakipan. - SELECT política
auth.uid()ukar ñiq'iyatax qillqaña privado buckets ukataki.CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Convención[user-id]/[filename]ukar archivunak apsuyaña ukatstorage.foldername()apnaqaña rutat dueño apsuñataki. - INSERT política qillqaña pachpa rutax forzayi.
CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. Jan WITH CHECK-ni, mä autenticado usuariu yaqha usuariu carpetaru uploadayaspa. - UPDATE ukat DELETE políticanak uchaña aplicaciónamax archivu mayachawi jan ukax armtañ catkpan. Sapa comando munay mä política. DELETE armkañax autenticado usuariunak jan propio archivunakap apsuñ atki; UPDATE armkañax archivu sobrescritura ch'ukt jan irnaqki.
- Cruce-usuariu acceso probaña pä navegador sesionampi. Usuariu A jamasin sign in, mä archivu upload, ruta copiya. Usuariu B yaqha navegadoran sign in, REST API ukat archivu apsuyaña tantiyaña. Respuestax
403jan ukax404munay, janipuni200.
-- 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]);Upload validación
Sapa upload servidor lado validi, bucket MIME ukat jiwit'awi restricciones utjkpan ukasa. IA codificación yänakax cliente-ukak validación defectu generi; janipun walt'ki.
- MIME tipo wasitat servidor-lado uñakipt'aña archivun actual byteat, janit
Content-Typecabeceratax. Mä biblioteca apnaqañafile-type(Node) jan ukax magic-byte huellanaka apnaqi. AtacanteContent-Type: image/jpegarsuyaspa mä archivun verdaderwa polyglot HTML / JavaScript carga ukäkipan. - EXIF metadatos uploadat imágenes ukat apsuyaña. EXIF GPS coordenadas, dispositivo número serial, ukat timestamps apkatkaspa.
sharp.withMetadata(false)jan ukaxexif-parserapnaqaña apsuñataki imantañ nayratak. - SVGs
scripttags jan ukaxonloadmanejador apkatkir niegaña. SVG XML — ukat IA generata aplicacionax SVG uploads "mä imagen sasin" inakir permitipxi.DOMPurifyservidor lado apnaqaña jan ukax SVG uploads tukuyat niegaña. - Determinista, jan tantiyañiri archivu suti apnaqaña. Janipuni original archivu suti imañ. Mä UUID jan ukax mä archivu contenido hash apnaqaña. Original archivu sutinakax jaltapxi ("
passport_scan_2024_01_15.jpg") ukat tantiyañiri sutinakax enumeración yatiyi.
Firmadas URLs
Firmadas URLs ukax clientenakax privado buckets ukar accesopxi. Caducidad, bucket alcance, ukat kun registratax munisi.
- Firmada-URL caducidad defectux 1 hora jan ukax juk'amp pisin. Supabase JS SDK ukan
createSignedUrl(path, expiresIn)segundos apsuyi. Janipuni31536000(mä mara) jamuq apnaqaña — URL mä permanente semi-público enlace tukuyani. - Janipuni firmadas URLs base de datusam ukan apsuyaña. Sapa peticionan jacha apsuyaña servidor lado. Mä apsut firmada URL 1-mara caducidaniri base de datus dump ukat jaltapxix urak'inawi acceso churi.
- Firmada-URL generación registraña, janit archivu uploads ukak. Mä compromiso qhipan amuyaspa, khitis kawkïr URL kawkïrkamax generki yatiñam.
auth.uid()+ bucket + objeto ruta + tiempo registraña. downloadAsopción apnaqaña usuariu-uploadayat archivunak churaña.createSignedUrl(path, expiresIn, { download: '.jpg' })mäContent-Disposition: attachmentcabecera forzayi archivu downloadañataki janit renderizañataki — HTML / SVG / HTML-en-PDF ejecución clase saltayi.
Operacional limpia
Storage configuración pacha apar mayjt'i. Aka pusi operacional itemnakax superficie ch'amjañataki.
- Buckets trimestralment auditi. Dashboard → Storage → Buckets. Público/privado estado ukat MIME-tipo listas aplicación amuyki ukamp confirmaña. Buckets "temporariamente" lurkir permanente apsuyatasi khitis apaqkañpan.
- Anónimo list operaciones uñakipt'aña. Storage logs (Dashboard → Logs → Storage)
LISTpeticionanak registri. Mä punto anónimo list peticionanaka mä privado bucket contra khitis ankaxat sondeapxki sañ muniwa. - Retención política mä efímerataki uploads uchaña. Temp buckets (imagen preview, draft uploads) 24-72 horat qhipan auto-armtañapa mä yatxat función ukamp. Indefinida retención GDPR / CCPA datos minimisación obligacionarux mä responsabilidadawa.
- Mä FixVibe escaneo phaxsisat apnaqaña.
baas.supabase-storage-publicverificación buckets anónimoGET+LISTukar arsutkir sondeyi. Machaq buckets uchatasi; jach'a uñakipawi mayjt'i — sapa pacha escaneo deriva katu.
Qhipa lurawinaka
Mä FixVibe escaneo production URL ukar apnaqaña — anónimo storage listings baas.supabase-storage-public ukan apsuyi. Aka checklist Supabase RLS escáner tabla layer ukat Supabase service role llawi JavaScript ukan qhanstayata llawi-qhanstayata adyacencia. Storage jan walt'awi yaqha BaaS proveedornakan, BaaS jan walt'awi escáner ulla.
