// docs / baas security / supabase storage
Supabase geymslufötu öryggisgátlisti: 22 atriði
Supabase Storage er þunn umlykja um S3-samhæfða fötu auk sama Row-Level Security-líkans og gagnagrunnurinn. Það þýðir að sömu RLS-gildrurnar sem hafa áhrif á töflur hafa áhrif á fílaaðgang — og nokkrar geymslu-sértækar sem birtast þegar AI-kóðunarverkfæri tengja saman upphalanir. Þessi gátlisti er 22 atriði yfir fimm hluta: fötustillingar, RLS-stefnur, staðfesting upphalana, signed URL og rekstrarhreinlæti. Hvert er sannreynanlegt á innan við 15 mínútum.
Hvert atriði hér að neðan er nauðsynlegt. Fyrir undirliggjandi RLS-vélrænni, sjáðu Supabase RLS-skanni. Fyrir lyklaopinberunarflokkinn sem er nálægur geymslu, sjáðu Supabase service-role-lykill opinberaður í JavaScript.
Fötustillingar
Byrjaðu með réttum sjálfgildum. Rangstillt fata lekur skrám hvort sem RLS þín er rétt eða ekki.
- Hafðu sjálfgefið hverja fötu sem einkaeign. Í Supabase Dashboard → Storage → Buckets, stilltu Public bucket-rofann á off nema þú hafir skýra ástæðu (markaðseignir, opinber prófíl-myndir án PII). Opinberar fötur sniðganga RLS fyrir lestraraðgerðir — hver sem hefur föttunafnið getur listað og halað niður.
- Stilltu harða skrárstærðartakmörkun á hverja fötu. Dashboard → Bucket settings → File size limit. 50 MB er skynsamlegt sjálfgildi fyrir notendaupphalanir; hækkaðu meðvitað fyrir myndband / stór-skrá-notkunartilfelli. Án takmörkunar getur ein illviljuð upphalan tæmt geymslukvóta þinn eða mánaðarlega bandvídd.
- Takmarkaðu leyfðar MIME-tegundir á hverja fötu. Listi yfir leyfðar MIME-tegundir — skýr leyfilisti, ekki banlistinn.
image/jpeg,image/png,image/webpfyrir mynda-eingöngu fötur. Leyfðu aldreitext/html,application/javascripteðaimage/svg+xmlí notendaefnisfötu — þau keyra í vafranum þegar þau eru framreidd í gegnum signed URL. - Notaðu eina fötu á hverja efnistegund, ekki eina sameiginlega fötu. Per-fötu-stillingar (stærð, MIME-tegundir, RLS-stefnur) eru sú smágerð sem þú hefur.
user-avatars-fata,document-uploads-fata, ogpublic-assets-fata er auðveldari að læsa niður en ein blandaðri fata. - Staðfestu CORS-stillingar ef framendi halar upp. Ef notendur hala beint upp úr vafranum á signed URL, verður fötu-CORS að lista framleiðsluuppruna þinn.
*er aðeins ásættanlegt fyrir opinberar fötur — aldrei fyrir fötur sem innihalda notenda-PII.
RLS-stefnur á storage.objects
Supabase Storage geymir fílalýsigögn í storage.objects-töflunni. RLS á þeirri töflu stjórnar því hver getur lesið, halað upp, uppfært eða eytt skrám. Án RLS er opin/einka-fáni föttunnar eina vörn þín.
- Staðfestu að RLS sé virkjuð á storage.objects.
SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects';verður að skilatrue. Supabase virkjar það sjálfgefið á nýjum verkefnum; staðfestu að það hafi ekki verið slökkt. - Skrifaðu SELECT-stefnu afmarkaða við
auth.uid()fyrir einkafötur.CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Sáttmálinn er að geyma skrár undir[user-id]/[filename]og notastorage.foldername()til að draga eigandann úr slóðinni. - Skrifaðu INSERT-stefnu sem framfylgir sama slóðasáttmála.
CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. Án WITH CHECK getur auðkenndur notandi halað upp í möppu annars notanda. - Bættu við UPDATE- og DELETE-stefnum ef forritið þitt styður skráaredit eða eyðingar. Hver skipun þarfnast eigin stefnu. Að sleppa DELETE þýðir að auðkenndir notendur geta ekki fjarlægt eigin skrár; að sleppa UPDATE þýðir að skrárhópun bregst þegjandi.
- Prófaðu krossnotanda-aðgang í tveimur vafralotum. Skráðu þig inn sem Notandi A, halaðu upp skrá, afritaðu slóðina. Skráðu þig inn sem Notandi B í öðrum vafra, reyndu að sækja skrána í gegnum REST-API. Svarið verður að vera
403eða404, aldrei200.
-- 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]);Staðfesting upphalana
Staðfestu hverja upphalan netþjónamegin, jafnvel þegar fötan hefur MIME- og stærðartakmarkanir. AI-kóðunarverkfæri framleiða biðlara-eingöngu staðfestingu sjálfgefið; það verndar ekkert.
- Endur-athugaðu MIME-tegund netþjónamegin frá raunverulegum bætum skrárinnar, ekki
Content-Type-hausnum. Notaðu safn eins ogfile-type(Node) eða magic-byte sniffing. Árásarmaður getur fullyrtContent-Type: image/jpegá skrá sem er í raun polyglot HTML / JavaScript greiðsla. - Fjarlægðu EXIF-lýsigögn úr upphöluðum myndum. EXIF getur innihaldið GPS-hnit, raðnúmer tækja og tímastimpla. Notaðu
sharpmeð.withMetadata(false)eðaexif-parsertil að fjarlægja áður en þú geymir. - Hafnaðu SVG sem innihalda
script-merki eðaonload-handfangara. SVG er XML — og mörg AI-mynduð forrit leyfa SVG-upphalanir sem "bara mynd." NotaðuDOMPurifynetþjónamegin eða hafnaðu SVG-upphölunum alveg. - Notaðu ákveðin, ógetanleg skrárnöfn. Ekki varðveita upprunalega skrárnafnið. Notaðu UUID eða hash af innihaldi skrárinnar. Upprunaleg skrárnöfn leka ("
passport_scan_2024_01_15.jpg") og fyrirsjáanleg nöfn leyfa upptalningu.
Signed URLs
Signed URLs eru hvernig biðlarar fá aðgang að einkafötum. Útrunninn, fötumarkmið og hvað er skráð skiptir máli.
- Hafðu sjálfgefið signed-URL útrunninn á 1 klukkustund eða minna. Supabase JS SDK
createSignedUrl(path, expiresIn)tekur sekúndur. Notaðu aldrei gildi eins og31536000(eitt ár) — URL-ið verður varanlegur hálf-opinber tengill. - Geymdu aldrei signed URLs í gagnagrunninum þínum. Búðu til ferskar netþjónamegin á hverri beiðni. Vistuð signed URL með 1-árs útrunna sem lekur í gegnum gagnagrunnsafrit veitir langtímaaðgang.
- Skráðu signed-URL-myndun, ekki bara skráaupphalanir. Ef þú grunar þjófnað seinna, þarftu að vita hver bjó til hvaða URL hvenær. Skráðu
auth.uid()+ fötu + hlutaslóð + tímastimpil. - Notaðu
downloadAs-valkostinn þegar þú framreiðir notendaupphlaðnar skrár.createSignedUrl(path, expiresIn, { download: '.jpg' })þvingarContent-Disposition: attachment-haus svo skráin sé hlaðin niður frekar en birt — sigrar HTML / SVG / HTML-í-PDF keyrsluflokkinn.
Rekstrarhreinlæti
Geymslustillingar rekur með tíma. Þessar fjórar rekstrarliðir halda yfirborðinu þéttu.
- Endurskoðaðu fötur ársfjórðungslega. Dashboard → Storage → Buckets. Staðfestu að opin/einka-staða og MIME-tegundalistar samsvari því sem forritið ætlar. Fötur stofnaðar "tímabundið" verða varanlegar ef enginn fjarlægir þær.
- Vaktaðu ókenndar listaaðgerðir. Geymsluskrár (Dashboard → Logs → Storage) skrá
LIST-beiðnir. Toppur ókenndra listabeiðna gegn einkafötu þýðir að einhver er að kanna hana utan frá. - Stilltu varðveislustefnu fyrir tímabundnar upphalanir. Temp-fötur (myndaforsýn, drög-upphalanir) ættu að eyðast sjálfvirkt eftir 24-72 klukkustundir í gegnum áætlað fall. Ótakmörkuð varðveisla er ábyrgð samkvæmt GDPR / CCPA gagnamínímerunarkröfum.
- Keyrðu FixVibe-skönnun mánaðarlega.
baas.supabase-storage-public-athugunin kannar fyrir fötum sem svara ókenndumGET+LIST. Nýjar fötur bætast við; gamlar breyta sýnileika — aðeins samfelld skönnun grípur rekið.
Næstu skref
Keyrðu FixVibe-skönnun gegn framleiðslu-URL þínum — ókenndar geymslulistar birtast undir baas.supabase-storage-public. Paraðu þennan gátlista með Supabase RLS-skanni fyrir töflulagið og Supabase service-role-lykill opinberaður í JavaScript fyrir lyklaopinberunarnábýlið. Fyrir geymslurangstillingar yfir aðrar BaaS-veitur, sjáðu BaaS-rangstillingaskanni.
