FixVibe

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

  1. 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.
  2. 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.
  3. Avmarka loyvdar MIME-typur per bøttu. Loyvdir MIME-typu-listi — greiður loyvi-listi, ikki blokk-listi. image/jpeg, image/png, image/webp til bert-mynda-bøttur. Loyv ongantíð text/html, application/javascript ella image/svg+xml í eini brúkaraikkis-bøttu — tey útinna í kagaranum, tá tey verða borin fram um undirskrivaða URL.
  4. 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, ein document-uploads-bøtta og ein public-assets-bøtta eru lættari at læsa enn ein býtt bøtta.
  5. 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.

  1. Vátta, at RLS er virkjað á storage.objects. SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects'; má geva true aftur. Supabase virkjar tað sum standard á nýggjum projektum; vátta at tað ikki er deaktiverað.
  2. 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úka storage.foldername() til at draga út ogarann frá leiðini.
  3. 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.
  4. 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.
  5. 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 403 ella 404, ongantíð 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]);

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.

  1. Endurkanna MIME-typu á servara-síðu frá fíluns veruligu bytum, ikki Content-Type-headaran. Brúk eitt bókasavn sum file-type (Node) ella magic-byte-sniffing. Ein árásarmaður kann krevja Content-Type: image/jpeg á fílu, sum verulig er ein polyglot HTML / JavaScript nýtsla.
  2. Tak EXIF-metadáta úr upplastaðum myndum. EXIF kann innihalda GPS-staðsetingar, mátaraflokkanummur og tíðar. Brúk sharp við .withMetadata(false) ella exif-parser fyri at strippa, áðrenn goyming.
  3. Nokta SVGr, sum innihalda script-merkjum ella onload-handfararum. SVG er XML — og mangar AI-framleiddar appir loyva SVG-upplastingar sum "bert ein mynd". Brúk DOMPurify á servara-síðu ella nokta SVG-upplastingar heilt.
  4. 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ð.

  1. 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 sum 31536000 (eitt ár) — URL'in verður ein varandi hálv-almennur leinki.
  2. 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.
  3. 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.
  4. Brúk downloadAs-valkost, tá tú berur fram brúkara-upplastaðar fílur. createSignedUrl(path, expiresIn, { download: '.jpg' }) tvingar ein Content-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.

  1. 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.
  2. 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.
  3. 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.
  4. Koyr eina FixVibe-skanning mánaðarliga. baas.supabase-storage-public-eftirkanningin royndar bøttur, sum svara til anonymar GET + 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.

// skanna tína baas-yvirflatu

Finn ta opnu talvuna, áðrenn onkur annar ger tað.

Set eina framleiðslu-URL inn. FixVibe telur upp tær BaaS-veitarar, sum tín app tosar við, fingraavryggjar teirra alment endapunkt og fráboðar, hvat ein óvátt klientur kann lesa ella skriva. Ókeypis, eingin innleggjing, eitt einki kort.

  • Ókeypis støði — 3 skanningar/mánaði, einki kort við tilmelding.
  • Passiv BaaS-fingraavrygging — eingin domena-vátting kravd.
  • Supabase, Firebase, Clerk, Auth0, Appwrite og fleiri.
  • AI-fix-leiðbeiningar á hvørjari findingi — set aftur inn í Cursor / Claude Code.
Supabase goymslubøtta-trygdarlisti: 22 evni — Docs · FixVibe