// docs / baas security / supabase storage
Supabase storage bucket seguridad checklist: 22 mba'erã
Supabase Storage ha'e peteĩ envoltura ipohýi'ỹva S3-compatible bucket-pe ha peteĩ Row-Level Security modelo peteĩchávante base de datos-icha. Péva he'ise pe RLS jejavypy ojahechakáva tabla-pe ohechauka avei kuatia ñepokuaa rehe — ha umi pa'ũ storage-pegua osẽva tembipuru IA omoinge aja jepokuaa kuatia. Ko checklist 22 mba'erã ipo aty rupi: bucket configuración, RLS política, ñepokuaa ñehecha, signed URL, ha tembiapokuéra higiene. Cada peteĩ ojejekuaa 15 aravo'íme.
Cada mba'erã yvyguápe ha'e tekotevẽva. RLS mba'éichapa omba'apo, ehecha Supabase RLS escáner. Llave exposición clase storage ypýpe, ehecha Supabase service role llave ojehechakáva JavaScript-pe.
Bucket configuración
Eñepyrũ ñembojere porã ndive. Peteĩ bucket oñembosakopa vai omyenyhẽ kuatia RLS oĩ porã térã nahániri.
- Embojere cada bucket privado-icha. Supabase Dashboard → Storage → Buckets-pe, embogue pe Public bucket toggle eguerekórõ'ỹ peteĩ motivo ekuatiapývape (marketing recurso, avatar público PII'ỹva). Bucket público ohasa RLS lectura tembiapópe — oguerekóva bucket réra ikatu olista ha oguenohẽ.
- Emoĩ peteĩ archivo tuichakue ipohýiva cada bucket-pe. Dashboard → Bucket settings → File size limit. 50 MB ha'e peteĩ predeterminado iporãva usuario ñepokuaapevemi; embojeko'akue tembiapópe vídeo / archivo tuicha. Pohýi'ỹre, peteĩ ñepokuaa ivaíva ikatu omokangy ne storage quota térã ne mes pe banda ancha.
- Eteni'a MIME tipo bucket rupi. Tipo MIME omoneĩ lista — allowlist ekuatiapýva, nahániri blocklist.
image/jpeg,image/png,image/webpbucket ta'ãngante-pe g̃uarã. Araka'eve emoneĩtext/html,application/javascript, térãimage/svg+xmlpeteĩ usuario-contenido bucket-pe — oñembojere navegador-pe oñemoherakuã rire signed URL rupi. - Eipuru peteĩ bucket cada contenido tipo-pe, nahániri peteĩ bucket ojeporúva opavavetépe. Bucket rupi ñemboheko (tuichakue, MIME tipo, RLS política) ha'e granularidad oguerekóva. Peteĩ
user-avatarsbucket, peteĩdocument-uploadsbucket, ha peteĩpublic-assetsbucket hasyve embotyhag̃ua peteĩ bucket ojejehe'aháicha. - Ehechakuaa CORS configuración frontend ñepokuaa ojapórõ. Usuario oñepokuaárõ direkto navegador-gui peteĩ signed URL-pe, pe bucket CORS olista va'erã ne producción origen.
*oñemoneĩ bucket público-pénte — araka'eve bucket usuario PII oguerekóva.
RLS política storage.objects-pe
Supabase Storage oñongatu archivo metadata storage.objects tabla-pe. RLS upe tabla rehe oñangareko mávapa ikatu omoñe'ẽ, omoinge, embojere, térã ombogue kuatia. RLS-'ỹme, pe bucket público/privado bandera ha'e ne ñangarekoñoiteva.
- Eikuaaporã RLS oĩ habilitado storage.objects-pe.
SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects';omyenyhẽ va'erãtrue. Supabase ohabilita predeterminado-icha proyecto pyahúpe; eikuaaporã ndaha'ei deshabilitado. - Ehai peteĩ SELECT política ojojáva
auth.uid()rehe bucket privado-pe g̃uarã.CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Pe ñembohape ha'e oñongatu kuatia[user-id]/[filename]ndive ha eipurustorage.foldername()oguenohẽ hag̃ua jára tape-gui. - Ehai peteĩ INSERT política omboaje pe peteĩchagua tape convención.
CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. WITH CHECK-'ỹme, peteĩ usuario autenticado ikatu omoinge ambue usuario carpeta-pe. - Emboaja UPDATE ha DELETE política ne aplicación omoneĩrõ archivo myatyrõ térã ñembogue. Cada comando oguereko ipy política. Embogue DELETE he'ise usuario autenticado ndaikatúi ombogue ipy kuatia; embogue UPDATE he'ise kuatia ñemboi ojejavy kirirĩháme.
- Eikuaapotĩ usuario ñembojuaju mokõi navegador sesión-pe. Eñemoinscribi Usuario A-icha, eñepokuaa peteĩ kuatia, ekopia pe tape. Eñemoinscribi Usuario B-icha ambue navegador-pe, eha'ã ohupyty pe kuatia REST API rupi. Pe ñembohovái
403térã404va'erã, araka'eve200.
-- 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]);Ñepokuaa ñehecha
Ehechakuaa cada ñepokuaa server-side, pe bucket oguerekórõ jepe MIME ha tuichakue jokoha. Tembipuru IA omoheñói cliente-nte ñehecha predeterminado-icha; péva noñangarekói mba'eve.
- Ehechakuaa MIME tipo server-side pe kuatia byte ko'ãgaguágui, nahániri pe
Content-Typeencabezado-gui. Eipuru peteĩ bibliotecafile-type(Node) térã magic-byte sniffing-icha. Peteĩ atacante ikatu omombe'uContent-Type: image/jpegpeteĩ kuatia ha'e teete HTML / JavaScript poliglota carga. - Eipe'a EXIF metadata ta'anga oñepokuaapyrégui. EXIF ikatu oguereko GPS coordenada, mba'epuru serial número, ha tiempo. Eipuru
sharp.withMetadata(false)ndive térãexif-parsereipe'a hag̃ua storage mboyve. - Embotove SVG oguerekóva
scriptmboypy térãonloadmanipulador. SVG ha'e XML — ha heta aplicación IA omoheñóiva omoneĩ SVG ñepokuaa "ta'angahaicha-nte." EipuruDOMPurifyserver-side térã embotove SVG ñepokuaa entero. - Eipuru kuatia réra oñemoĩva ekuatiapýva, oikuaakuaa'ỹva. Ani eñongatu kuatia réra teete. Eipuru peteĩ UUID térã peteĩ hash kuatia contenido-gui. Kuatia réra teete osẽ ("
passport_scan_2024_01_15.jpg") ha réra oikuaakuaáva omoneĩ enumeración.
Signed URL
Signed URL ha'e mba'éichapa cliente ohupyty bucket privado. Pe expiración, pe bucket alcance, ha mba'e oñembokuatia oĩva tuichaiterei.
- Embojere signed-URL expiración 1 hora térã ipohýive-vape. Pe Supabase JS SDK
createSignedUrl(path, expiresIn)ohupyty segundo. Araka'eve eipuru valor31536000-icha (peteĩ ary) — pe URL ojejapo peteĩ enlace permanente semi-público. - Araka'eve eñongatu signed URL ne base de datos-pe. Emoheñói pyahu server-side cada solicitud-pe. Peteĩ signed URL oñongatupyréva 1 ary expiración-ndive osẽva base de datos volcado rupi omeẽ jepokuaa areve.
- Ehai log signed-URL ñemoheñói, nahániri kuatia ñepokuaa añoite. Eikuaapyrõ peteĩ ñemyengovia upéi, eikuaa va'erã máva omoheñói mba'e URL araka'e. Ehai log
auth.uid()+ bucket + objeto tape + tiempo. - Eipuru pe
downloadAsopción eipurúrõ usuario-oñepokuaa kuatia.createSignedUrl(path, expiresIn, { download: '.jpg' })omoĩ peteĩContent-Disposition: attachmentencabezado upéicha pe kuatia oñembogueheja oñemboheko rangue — opaha pe HTML / SVG / HTML-PDF-pegua ñembojere clase.
Tembiapokuera higiene
Storage configuración omoambue tiempo-pe. Ko'ã irundy tembiapokue mba'erã omboty pe superficie.
- Ehecha bucket cuatrimestre-pe. Dashboard → Storage → Buckets. Ehechakuaa público/privado estado ha MIME-tipo lista ojoja pe aplicación oipotávándive. Bucket omoheñoipyréva "sapy'a" oikove ohóvo avave nombogue rire.
- Ema'ẽ anonymous lista tembiapo. Storage log (Dashboard → Logs → Storage) oñongatu
LISTsolicitud. Peteĩ ñembojupi anonymous lista solicitud peteĩ bucket privado rehe he'ise oĩ peteĩ ohecháva okágui. - Embojere peteĩ retención política ñepokuaa ephemeral-pe. Bucket temp (ta'anga ñemyanduve, borrador ñepokuaa) ombogue auto va'erã 24-72 hora rire peteĩ función programa rupi. Ñembyaty araka'eve ha'e peteĩ tekotevẽ GDPR / CCPA datos-minimisación rupi.
- Embohape peteĩ FixVibe escaneo cada mes. Pe
baas.supabase-storage-publiccheck ohecha bucket ombohováiva anonymousGET+LIST. Bucket pyahu oñembojuaju; ymaguáre omoambue jehecha — escaneo jepi añoite ojuhu pe ñemoambue.
Tape upéi
Embohape peteĩ FixVibe escaneo ne producción URL-pe — anonymous storage lista osẽ baas.supabase-storage-public guýpe. Embojuaju ko checklist Supabase RLS escáner ndive tabla layer-pe ha Supabase service role llave ojehechakáva JavaScript-pe llave-exposición jepokuaape. Storage oñembosakopa vai ambue BaaS proveedor rupi, ehecha BaaS oñembosakopa vai escáner.
