FixVibe

// 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.

  1. 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.
  2. 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.
  3. 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/webp fyrir mynda-eingöngu fötur. Leyfðu aldrei text/html, application/javascript eða image/svg+xml í notendaefnisfötu — þau keyra í vafranum þegar þau eru framreidd í gegnum signed URL.
  4. 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, og public-assets-fata er auðveldari að læsa niður en ein blandaðri fata.
  5. 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.

  1. Staðfestu að RLS sé virkjuð á storage.objects. SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects'; verður að skila true. Supabase virkjar það sjálfgefið á nýjum verkefnum; staðfestu að það hafi ekki verið slökkt.
  2. 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 nota storage.foldername() til að draga eigandann úr slóðinni.
  3. 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.
  4. 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.
  5. 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 403 eða 404, aldrei 200.
sql
-- 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.

  1. Endur-athugaðu MIME-tegund netþjónamegin frá raunverulegum bætum skrárinnar, ekki Content-Type-hausnum. Notaðu safn eins og file-type (Node) eða magic-byte sniffing. Árásarmaður getur fullyrt Content-Type: image/jpeg á skrá sem er í raun polyglot HTML / JavaScript greiðsla.
  2. 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 sharp með .withMetadata(false) eða exif-parser til að fjarlægja áður en þú geymir.
  3. Hafnaðu SVG sem innihalda script-merki eða onload-handfangara. SVG er XML — og mörg AI-mynduð forrit leyfa SVG-upphalanir sem "bara mynd." Notaðu DOMPurify netþjónamegin eða hafnaðu SVG-upphölunum alveg.
  4. 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.

  1. 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 og 31536000 (eitt ár) — URL-ið verður varanlegur hálf-opinber tengill.
  2. 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.
  3. 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.
  4. Notaðu downloadAs-valkostinn þegar þú framreiðir notendaupphlaðnar skrár. createSignedUrl(path, expiresIn, { download: '.jpg' }) þvingar Content-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.

  1. 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.
  2. 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á.
  3. 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.
  4. Keyrðu FixVibe-skönnun mánaðarlega. baas.supabase-storage-public-athugunin kannar fyrir fötum sem svara ókenndum GET + 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.

// skannaðu baas-yfirborð þitt

Finndu opnu töfluna áður en einhver annar gerir það.

Settu inn framleiðslu-URL. FixVibe telur upp BaaS-veiturnar sem forritið þitt talar við, fingrafarir opnu endapunktana þeirra og tilkynnir hvað ókennt biðlari getur lesið eða skrifað. Ókeypis, engin uppsetning, ekkert kort.

  • Ókeypis stig — 3 skannanir/mánuð, ekkert kort við skráningu.
  • Hlutlaus BaaS-fingrafararakning — engin lénsstaðfesting þörf.
  • Supabase, Firebase, Clerk, Auth0, Appwrite og fleiri.
  • AI-lagfæringarspurningar á hverri niðurstöðu — límdu aftur í Cursor / Claude Code.
Keyrðu ókeypis BaaS-skönnun

engin skráning krafist

Supabase geymslufötu öryggisgátlisti: 22 atriði — Docs · FixVibe