Hopp til innhold

Supabase public bucket: hvem kan lese filene dine

Supabase

Vis som MarkdownÅpne i ClaudeÅpne i ChatGPTÅpne i Perplexity

Spørsmålet kopieres også. Hvis chatten åpnes tom, lim det inn.

TL;DR

En offentlig bucket serverer hver fil i den til alle som har URL-en, uten nøkkel og uten innlogging: storage-policyene dine blir ikke spurt ved nedlasting. På den lokale stacken min ga den samme testfilen 200 med innholdet fra en offentlig bucket og 400 fra en privat. Opplasting, sletting og flytting går fortsatt gjennom policyer. Bruk offentlige buckets til filer som er offentlige av natur, som avatarer og artikkelbilder, og private buckets med signerte URL-er til alt annet.

Den gratis Supabase-sikkerhetssjekken min har to regler om buckets: “Offentlige storage-buckets” lister dem, så du kan bekrefte at hver av dem skal være offentlig, og “Offentlige buckets uten opplastingsgrenser” flagger offentlige buckets uten grense for størrelse eller filtype. Her er hva det offentlige flagget faktisk endrer.

Hva betyr en offentlig bucket i Supabase?

Supabases guide om buckets definerer to tilgangsmodeller. I en privat bucket går hver operasjon, nedlastinger inkludert, gjennom RLS-policyer på storage.objects; en fil leses med brukerens token eller en signert URL som utløper. I en offentlig bucket omgår henting og servering av filer tilgangskontrollen, så alle med URL-en kan lese filen. Tilgangskontrollen gjelder fortsatt for opplasting, sletting, flytting og kopiering.

Buckets er private som standard. En bucket blir offentlig når noen krysser av i Dashboard eller oppretter den med public: true, en vanlig snarvei når et bilde ikke vil lastes.

Hva ga hver bucket i testen min?

På en lokal Supabase-stack (CLI 2.109.1) opprettet jeg én offentlig og én privat bucket, lastet opp den samme lille tekstfilen til begge med secret key, og ba så om den uten noen nøkkel, som en fremmed med lenken ville gjort:

Samme fil, forespurt uten nøkkel. Lokal Supabase Storage, én offentlig og én privat bucket. Offentlig bucket: Uten nøkkel → offentlig bucket → 200, fil sendt; Privat bucket: Uten nøkkel → privat bucket → 400, ikke funnet.
Reproduksjonen min på en lokal Supabase-stack, 23. oktober 2026.
Forespørsel om 2026/invoice-001.txt Offentlig bucket Privat bucket
/storage/v1/object/public/…, ingen nøkkel 200, filinnholdet 400, “Bucket not found”
/storage/v1/object/authenticated/…, bare publishable key 200 400

Den private bucketen svarer som om den ikke fantes, og det er det du vil ha. Den offentlige gir filen til alle som kan gjette eller finne stien.

Hvorfor betyr URL-en så mye?

En offentlig fil er bare så hemmelig som stien sin. Stier er ofte forutsigbare: en bruker-id, en dato, et fakturanummer. De lekker også gjennom sidekilde, delte lenker, nettleserhistorikk og logger. En faktura, en passkopi eller en signert kontrakt i en offentlig bucket er i praksis publisert.

Hvordan velger og fikser du det?

  • Offentlig bucket: filer ment for alle, som avatarer, produktbilder og bloggbilder. Sett en grense for filstørrelse og tillatte MIME-typer på bucketen, så den offentlige opplastingsveien policyene dine tillater, ikke kan brukes til å hoste noe annet.
  • Privat bucket: dokumenter, eksporter, fakturaer, alt personlig. Last ned med brukerens økt, eller lag en signert URL som utløper.

Slik ser du bucketene dine og grensene deres:

select id, public, file_size_limit, allowed_mime_types
from storage.buckets
order by public desc, id;

En privat bucket trenger også policyer på storage.objects, vanligvis med en sjekk av at den første mappen i stien er brukerens eller selskapets id. Etter at du har flyttet et prosjekt: tell disse policyene. I én app feilet hver opplasting fordi policy-migreringen aldri ble kjørt, noe jeg skrev om i sikkerhetsjekklisten min for Lovable-apper. Hva annet publishable key kan nå, står i Supabase anon key vs service role key.

© 2026 Denys Zaichenko. Opprinnelig artikkel: https://madsalt.tech/no/notes/supabase-public-bucket/