Trumpai
Viešas bucket kiekvieną savo failą atiduoda kiekvienam, turinčiam URL, be rakto ir prisijungimo: atsisiunčiant jūsų storage politikos nenagrinėjamos. Mano vietinėje aplinkoje tas pats testinis failas iš viešo bucket grąžino 200 ir turinį, o iš privataus 400. Įkėlimai, trynimai ir perkėlimai vis dar eina per politikas. Viešus bucket naudokite failams, kurie iš prigimties vieši, pavyzdžiui, avatarams ir straipsnių paveikslėliams, o viskam kitam privačius bucket su pasirašytais URL.
Mano nemokamas Supabase saugos tikrintuvas turi dvi taisykles apie bucket: „Vieši storage bucket” juos išvardija, kad galėtumėte patvirtinti, jog kiekvienas turi būti viešas, o „Vieši bucket be įkėlimo apribojimų” pažymi viešus bucket be dydžio ar failo tipo apribojimo. Štai ką viešas žymeklis iš tikrųjų pakeičia.
Ką Supabase reiškia viešas bucket?
Supabase bucket vadovas apibrėžia du prieigos modelius. Privačiame bucket kiekviena operacija, įskaitant atsisiuntimus, eina per RLS politikas lentelėje storage.objects; failas skaitomas su naudotojo tokenu arba pasirašytu URL, kurio galiojimas baigiasi. Viešame bucket failų gavimas ir pateikimas apeina prieigos kontrolę, todėl bet kas su URL gali perskaityti failą. Prieigos kontrolė vis tiek taikoma įkėlimui, trynimui, perkėlimui ir kopijavimui.
Bucket pagal numatytuosius nustatymus yra privatūs. Bucket tampa viešas, kai kas nors pažymi langelį Dashboard arba sukuria jį su public: true, o tai įprastas trumpesnis kelias, kai paveikslėlis neįsikrauna.
Ką kiekvienas bucket grąžino mano teste?
Vietiniame Supabase (CLI 2.109.1) sukūriau vieną viešą ir vieną privatų bucket, į abu įkėliau tą patį nedidelį tekstinį failą su secret key ir paprašiau jo be jokio rakto, kaip nepažįstamasis su nuoroda:
Užklausa failui 2026/invoice-001.txt |
Viešas bucket | Privatus bucket |
|---|---|---|
/storage/v1/object/public/…, be rakto |
200, failo turinys |
400, “Bucket not found” |
/storage/v1/object/authenticated/…, tik publishable key |
200 |
400 |
Privatus bucket atsako taip, lyg jo nebūtų, ir būtent to norite. Viešas atiduoda failą kiekvienam, kuris kelią atspėja ar suranda.
Kodėl URL toks svarbus?
Viešas failas slaptas tiek, kiek jo kelias. Keliai dažnai nuspėjami: naudotojo id, data, sąskaitos numeris. Jie nutekėja ir per puslapio šaltinį, bendrinamas nuorodas, naršyklės istoriją bei žurnalus. Sąskaita, paso skenas ar pasirašyta sutartis viešame bucket iš esmės paskelbta.
Kaip pasirinkti ir ištaisyti?
- Viešas bucket: failai, skirti visiems, pavyzdžiui, avatarai, produktų nuotraukos ir tinklaraščio paveikslėliai. Nustatykite bucket failo dydžio limitą ir leidžiamus MIME tipus, kad viešojo įkėlimo kelio, kurį leidžia jūsų politikos, nebūtų galima naudoti kam nors kitam talpinti.
- Privatus bucket: dokumentai, eksportai, sąskaitos, viskas asmeninio. Atsisiųskite su naudotojo sesija arba sukurkite pasirašytą URL, kurio galiojimas baigiasi.
Norėdami pamatyti savo bucket ir jų apribojimus:
select id, public, file_size_limit, allowed_mime_types
from storage.buckets
order by public desc, id;
Privačiam bucket reikia ir politikų lentelėje storage.objects, dažniausiai tikrinančių, kad pirmasis kelio aplankas yra naudotojo ar įmonės id. Perkėlę projektą suskaičiuokite tas politikas: vienoje programoje kiekvienas įkėlimas nepavyko, nes politikų migracija niekada nebuvo paleista, ką aprašiau savo Lovable programos saugos sąraše. Ką dar pasiekia publishable key, rasite straipsnyje Supabase anon key vs service role key.