// docs / baas security / supabase storage
Supabase goymslubøtta-trygdarlisti: 22 evni
Supabase Storage er ein tunn umbúgving um eina S3-samsvarandi bøttu plús sama Row-Level Security modul sum dátugrunnurin. Tað merkir, at somu RLS-trupulleikar, sum ávirka talvur, ávirka fílu-atgongd — og fáir goymslu-serligir, sum koma fram, tá AI-kotuamboð skipa upplastingar. Hesin listi er 22 evni yvir fimm partar: bøttu-skipan, RLS-politikkar, upplasting-vátting, undirskrivaðar URL'ar og rakstrarligt reinlívi. Hvørt er váttanligt í minni enn 15 minuttum.
Hvørt evni niðanfyri er neyðugt. Fyri tær undirliggjandi RLS-mekanikkir, sí Supabase RLS-skannara. Fyri lykilavdúkanarflokkin næst goymslu, sí Supabase service role key avdúkaður í JavaScript.
Bøttuskipan
Byrja við røttum standardum. Ein misskipa bøtta lekkir fílur, hvørt sum RLS er rætt ella ikki.
- Sett hvørja bøttu sum standard til privata. Í Supabase Dashboard → Storage → Buckets, sett Public bucket-rísl til sløkkt, um tú ikki hevur greiða orsøk (marknaðarførsla-eindir, almennar avatarar uttan PII). Almennar bøttur fara uttanum RLS fyri lestur — hvør tann við bøttunavninum kann lista og niðurlasta.
- Sett eina hart fílustørdarmark á hvørjari bøttu. Dashboard → Bucket settings → File size limit. 50 MB er ein skilagóður standardur til brúkara-upplastingar; loyk hann viljandi til video / stór-fílu nýtslufer. Uttan eina mark kann ein einstøk illviljað upplasting svortast tína goymslukvotu ella tína mánaðar-bandbreidd.
- Avmarka loyvdar MIME-typur per bøttu. Loyvdir MIME-typu-listi — greiður loyvi-listi, ikki blokk-listi.
image/jpeg,image/png,image/webptil bert-mynda-bøttur. Loyv ongantíðtext/html,application/javascriptellaimage/svg+xmlí eini brúkaraikkis-bøttu — tey útinna í kagaranum, tá tey verða borin fram um undirskrivaða URL. - Brúk eina bøttu per innihaldstypu, ikki eina býtta bøttu. Per-bøttu-stillingar (stødd, MIME-typur, RLS-politikkar) eru bert tann granskingarstigið, tú hevur. Ein
user-avatars-bøtta, eindocument-uploads-bøtta og einpublic-assets-bøtta eru lættari at læsa enn ein býtt bøtta. - Vátta CORS-skipan, um frontend lastar upp. Um brúkarar lasta upp beinleiðis frá kagaranum til eina undirskrivaða URL, má bøttuns CORS lista tína framleiðslukell.
*er góðtikið bert til almennar bøttur — ongantíð til bøttur, sum hava brúkara-PII.
RLS-politikkar á storage.objects
Supabase Storage goymir fílu-metadáta í storage.objects-talvuni. RLS á tí talvu stýrir, hvør kann lesa, lasta upp, uppdatera ella strika fílur. Uttan RLS er bøttuns almenn/privat-rísl tín einasta verja.
- Vátta, at RLS er virkjað á storage.objects.
SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects';má gevatrueaftur. Supabase virkjar tað sum standard á nýggjum projektum; vátta at tað ikki er deaktiverað. - Skriva eina SELECT-politikk avmarkað til
auth.uid()fyri privatar bøttur.CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Konventiónin er at goyma fílur undir[user-id]/[filename]og brúkastorage.foldername()til at draga út ogarann frá leiðini. - Skriva eina INSERT-politikk, sum framtvingar somu leiða-konventión.
CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. Uttan WITH CHECK kann ein váttaður brúkari lasta upp inn í ein annan brúkaras mappu. - Legg UPDATE- og DELETE-politikkar afturat, um tín app stuðlar fílu-redigering ella -striking. Hvør kommando hevur tørv á síni egnu politikk. At sleppa undan DELETE merkir, at váttaðir brúkarar ikki kunnu strika sínar egnu fílur; at sleppa undan UPDATE merkir, at fílu-overskriving fer mistur í løynd.
- Royn kross-brúkara-atgongd í tveimum kagara-fundum. Tilmelda teg sum brúkari A, lasta eina fílu upp, kopiera leiðina. Tilmelda teg sum brúkari B í øðrum kagara, royn at heinta fíluna gjøgnum REST-API'in. Svarið má vera
403ella404, ongantíð200.
-- 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]);Upplasting-vátting
Vátta hvørja upplasting á servara-síðu, eisini tá bøttan hevur MIME- og stødda-avmarkingar. AI-kotuamboð framleiða klient-bert-vátting sum standard; tað verjir einki.
- Endurkanna MIME-typu á servara-síðu frá fíluns veruligu bytum, ikki
Content-Type-headaran. Brúk eitt bókasavn sumfile-type(Node) ella magic-byte-sniffing. Ein árásarmaður kann krevjaContent-Type: image/jpegá fílu, sum verulig er ein polyglot HTML / JavaScript nýtsla. - Tak EXIF-metadáta úr upplastaðum myndum. EXIF kann innihalda GPS-staðsetingar, mátaraflokkanummur og tíðar. Brúk
sharpvið.withMetadata(false)ellaexif-parserfyri at strippa, áðrenn goyming. - Nokta SVGr, sum innihalda
script-merkjum ellaonload-handfararum. SVG er XML — og mangar AI-framleiddar appir loyva SVG-upplastingar sum "bert ein mynd". BrúkDOMPurifyá servara-síðu ella nokta SVG-upplastingar heilt. - Brúk ávís, óvigantøk fílunøvn. Hav ikki upprunafílunavnið. Brúk eina UUID ella eitt hash av fíluns innihaldi. Upprunafílunøvn leka ("
passport_scan_2024_01_15.jpg") og fyrisigjanlig nøvn loyva upptelling.
Undirskrivaðar URL'ar
Undirskrivaðar URL'ar eru hvussu klientar fáa atgongd til privatar bøttur. Útrunningin, bøttu-fevningurin, og hvat verður loggað, merkir nakað.
- Sett standard undirskriva-URL-útrunning til 1 tíma ella minni. Supabase JS SDK'in síni
createSignedUrl(path, expiresIn)tekur sekundir. Brúk ongantíð virði sum31536000(eitt ár) — URL'in verður ein varandi hálv-almennur leinki. - Goym ongantíð undirskrivaðar URL'ar í tínum dátugrunni. Framleið nýggjar á servara-síðu á hvørjari fyrispurning. Ein goymd undirskriva-URL við 1-árs útrunning, sum lekkir gjøgnum eitt dátugrunns-dump, gevur langtíðar atgongd.
- Logga undirskriva-URL-framleiðslu, ikki bert fílu-upplastingar. Um tú heldur seinni, at ein kompromittering er hend, mást tú vita, hvør framleiddi hvørja URL nær. Logga
auth.uid()+ bøttu + objekt-leið + tíðarmerki. - Brúk
downloadAs-valkost, tá tú berur fram brúkara-upplastaðar fílur.createSignedUrl(path, expiresIn, { download: '.jpg' })tvingar einContent-Disposition: attachment-headara, so fíluna lastur niður í staðin fyri at endurframleiðast — varjar ímóti HTML / SVG / HTML-í-PDF-útinnandi flokkinum.
Rakstrarligt reinlívi
Goymsluskipan rekur við tíðini. Hesi fýra rakstrarlig evni halda yvirflatuna tætta.
- Endurskoða bøttur kvartalsvís. Dashboard → Storage → Buckets. Vátta almenn/privat-stand og MIME-typu-listar samsvara, sum appin væntar. Bøttur stovnaðar "fyribils" verða varandi, um eingin tekur tær burtur.
- Vakta anonymar lista-uppgerðir. Storage-loggar (Dashboard → Logs → Storage) skrásetir
LIST-fyrispurningar. Eitt loyk av anonymum lista-fyrispurningum móti einari privatari bøttu merkir, at onkur royndar hana úr uttan. - Sett ein varðveitslupolitikk fyri stuttvarandi upplastingar. Stuttvaranli bøttur (mynda-fyrisyning, hugskots-upplastingar) eiga sjálvirkandi at vera strikaðar eftir 24-72 tímum gjøgnum eina skipa funktión. Ótíða varðveitsla er ein ábyrgd undir GDPR / CCPA dáta-minkingar-skyldum.
- Koyr eina FixVibe-skanning mánaðarliga.
baas.supabase-storage-public-eftirkanningin royndar bøttur, sum svara til anonymarGET+LIST. Nýggjar bøttur koma afturat; gamlar broyta sjónligheit — bert samanhangandi skanning fangar reksilið.
Næstu stig
Koyr eina FixVibe-skanning móti tíni framleiðslu-URL — anonymar goymslu-listingar koma fram undir baas.supabase-storage-public. Pør henda lista við Supabase RLS-skannara fyri talvulagið og Supabase service role key avdúkaður í JavaScript fyri lykilavdúkanar-næstuna. Fyri goymslu-misskipanir á øðrum BaaS-veitarum, sí BaaS-misskipansskannari.
