// docs / baas security / supabase storage
Supabase biltegiratze-ontziaren segurtasun-zerrenda: 22 elementu
Supabase Storage S3-rekin bateragarria den ontzi baten gainean bildurik dagoen geruza mehe bat da, gehi datu-basearen errenkada-mailako segurtasun-eredu berdina. Horrek esan nahi du tauletan eragiten dituzten RLS hutsuneak berberek eragiten dietela fitxategi-sarbideei — eta IA kodetze-tresnek igoerak konektatzen dituztenean agertzen diren biltegiratzeari berariazko gutxi batzuk. Zerrenda hau bost ataletan banatutako 22 elementu da: ontzien konfigurazioa, RLS politikak, igoeraren baliozkotzea, sinatutako URLak eta higiene operatiboa. Bakoitza 15 minutu baino gutxiagotan egiaztatu daiteke.
Beheko elementu bakoitza ezinbestekoa da. Azpiko RLS mekanikari buruzkoa, ikus Supabase RLS eskanerra. Biltegiratzearekin lotutako gako-agerpen klasea, ikus Supabase service role gakoa JavaScript-en agerian.
Ontzien konfigurazioa
Hasi lehenetsi egokiekin. Gaizki konfiguratutako ontzi batek fitxategiak iragazten ditu zure RLS zuzena izan ala ez.
- Lehenetsi ontzi bakoitza pribatura. Supabase aginte-panelean → Storage → Buckets, ezarri Public bucket aldagai-botoia itzalita zergati esplizitu bat ez baduzu (marketin-aktiboak, PII gabeko abatar publikoak). Ontzi publikoek RLS saihesten dute irakurketa-eragiketetarako — ontziaren izena duen edonork zerrendatu eta deskargatu dezake.
- Ezarri fitxategi-tamaina muga gogor bat ontzi bakoitzean. Aginte-panela → Bucket settings → File size limit. 50 MB lehenetsi zentzudun bat da erabiltzaileen igoeretarako; hazi nahita bideo / fitxategi handi kasuetarako. Mugarik gabe, igoera maltzur bakar batek zure biltegiratze-kuota edo zure hileko banda-zabalera agortu dezake.
- Mugatu MIME mota baimenduak ontzi bakoitzeko. MIME mota baimenduen zerrenda — baimen-zerrenda esplizitua, ez blokeo-zerrenda.
image/jpeg,image/png,image/webpirudi soileko ontzietarako. Inoiz ez baimendutext/html,application/javascriptedoimage/svg+xmlerabiltzaileen edukiaren ontzi batean — sinatutako URL bidez zerbitzatzen direnean nabigatzailean exekutatzen dira. - Erabili ontzi bat eduki-mota bakoitzeko, ez ontzi partekatu bakar bat. Ontzi-bakoitzeko ezarpenak (tamaina, MIME motak, RLS politikak) dituzun granularitatea dira.
user-avatarsontzi bat,document-uploadsontzi bat etapublic-assetsontzi bat errazago blokeatu daitezke ontzi nahasi bakar bat baino. - Egiaztatu CORS konfigurazioa frontend-igoerak egiten badira. Erabiltzaileek nabigatzailetik sinatutako URL batera zuzenean igotzen badute, ontziaren CORSak zure ekoizpen-jatorria zerrendatu behar du.
*ontzi publikoetarako bakarrik onargarria da — inoiz ez erabiltzaileen PII duten ontzietarako.
storage.objects-eko RLS politikak
Supabase Storage-k fitxategien metadatuak storage.objects taulan gordetzen ditu. Taula horretako RLSk nor irakurtzen, kargatzen, eguneratzen edo ezabatzen duen fitxategiak kontrolatzen du. RLSrik gabe, ontziaren publiko/pribatua dela zure babes bakarra da.
- Berretsi RLS gaituta dagoela storage.objects-en.
SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects';trueitzuli behar du. Supabasek lehenetsia gaitzen du proiektu berrietan; egiaztatu desgaituta ez dagoela. - Idatzi SELECT politika bat
auth.uid()-ra mugatuta ontzi pribatuetarako.CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Konbentzioa fitxategiak[user-id]/[filename]azpian gordetzea da etastorage.foldername()erabiltzea jabea bidetik ateratzeko. - Idatzi INSERT politika bat bide-konbentzio bera betearazten duena.
CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. WITH CHECK gabe, autentikatutako erabiltzaile batek beste erabiltzaile baten karpetan igo dezake. - Gehitu UPDATE eta DELETE politikak zure aplikazioak fitxategi-edizioak edo ezabaketak onartzen baditu. Komando bakoitzak bere politika behar du. DELETE saltatzeak esan nahi du autentikatutako erabiltzaileek ezin dituztela bere fitxategiak kendu; UPDATE saltatzeak esan nahi du fitxategi-gainidazketek isilean huts egiten dutela.
- Proba erabiltzaile arteko sarbidea bi nabigatzaile-saiotan. Eman izena A erabiltzaile gisa, igo fitxategi bat, kopiatu bidea. Eman izena B erabiltzaile gisa beste nabigatzaile batean, saiatu fitxategia REST APIaren bidez eskuratzen. Erantzuna
403edo404izan behar du, inoiz ez200.
-- 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]);Igoeraren baliozkotzea
Baliozkotu igoera bakoitza zerbitzariaren aldetik, baita ontziak MIME eta tamaina-mugak dituenean ere. IA kodetze-tresnek bezero-soilik baliozkotzea sortzen dute lehenetsita; horrek ez du ezer babesten.
- Berriz egiaztatu MIME mota zerbitzariaren aldetik fitxategiaren benetako byte-tatik, ez
Content-Typegoiburutik. Erabilifile-type(Node) bezalako liburutegi bat edo magic-byte usnaketa. Erasotzaile batekContent-Type: image/jpegaldarrika dezake benetan poliglota HTML / JavaScript karga bat den fitxategi batean. - Kendu EXIF metadatuak igotako irudietatik. EXIFek GPS koordenatuak, gailuaren serie-zenbakiak eta denbora-zigiluak izan ditzake. Erabili
sharp.withMetadata(false)-rekin edoexif-parserbiltegiratu aurretik kentzeko. - Errefusatu
scriptetiketak edoonloadkudeatzaileak dituzten SVGak. SVG XML da — eta IAk sortutako aplikazio askok SVG igoerak baimentzen dituzte "irudi bat baino ez balira bezala". ErabiliDOMPurifyzerbitzariaren aldetik edo errefusatu SVG igoerak guztiz. - Erabili deterministiko eta asmaezinezko fitxategi-izenak. Ez gorde jatorrizko fitxategi-izena. Erabili UUID bat edo fitxategiaren edukiaren hash bat. Jatorrizko fitxategi-izenek iragazten dute ("
pasaporte_eskaneatzea_2024_01_15.jpg") eta aurreikus daitezkeen izenek zenbaketa ahalbidetzen dute.
Sinatutako URLak
Sinatutako URLak bezeroek ontzi pribatuetara nola sartzen diren da. Iraungitzea, ontziaren esparrua eta zer erregistratzen den garrantzitsuak dira.
- Lehenetsi sinatutako URLen iraungitzea ordubete edo gutxiagora. Supabase JS SDK-ren
createSignedUrl(path, expiresIn)segundoak hartzen ditu. Inoiz ez erabili31536000bezalako balioak (urtebete) — URLa esteka erdi-publiko iraunkor bihurtzen da. - Inoiz ez gorde sinatutako URLak zure datu-basean. Sortu berriak zerbitzariaren aldetik eskaera bakoitzean. Urtebeteko iraungitzea duen gordetako sinatutako URL bat datu-basearen iraulketa baten bidez iragazten denean, epe luzeko sarbidea ematen du.
- Erregistratu sinatutako URLen sorrera, ez bakarrik fitxategi-igoerak. Geroago konpromiso bat susmatzen baduzu, jakin behar duzu nork sortu zuen zein URL noiz. Erregistratu
auth.uid()+ ontzia + objektuaren bidea + denbora-zigilua. - Erabili
downloadAsaukera erabiltzaileek igotako fitxategiak zerbitzatzean.createSignedUrl(path, expiresIn, { download: '.jpg' })-kContent-Disposition: attachmentgoiburua behartzen du, beraz, fitxategia errenderizatu beharrean deskargatzen da — HTML / SVG / HTML-PDF-an exekuzio klasea garaitzen du.
Higiene operatiboa
Biltegiratzearen konfigurazioak denboran zehar dabilkete. Lau elementu operatibo hauek azalera estu mantentzen dute.
- Auditatu ontziak hiruhilekoetan. Aginte-panela → Storage → Buckets. Berretsi publiko/pribatu egoera eta MIME-moten zerrendak aplikazioak espero duenarekin bat datozela. "Aldi baterako" sortutako ontziak betikoak bihurtzen dira inork ez baditu kentzen.
- Monitorizatu zerrendatze-eragiketa anonimoak. Biltegiratze-erregistroek (Aginte-panela → Logs → Storage)
LISTeskaerak erregistratzen dituzte. Ontzi pribatu baten aurkako anonimoko zerrendatze-eskaeren gorakada batek esan nahi du norbait kanpotik miatzen ari dela. - Ezarri atxikitze-politika igoera iragankorretarako. Aldi baterako ontziek (irudi-aurrebista, zirriborro igoerak) 24-72 ordu igarota auto-ezabatu beharko lukete antolatutako funtzio baten bidez. Atxikitze mugagabea zama bat da GDPR / CCPA datuen minimizazio-betebeharren arabera.
- Egin FixVibe eskaneatze bat hilero.
baas.supabase-storage-publicegiaztapenakGET+LISTanonimoei erantzuten dieten ontziak miatzen ditu. Ontzi berriak gehitzen dira; zaharrek ikusgaitasuna aldatzen dute — etengabeko eskaneatzeak baino ez du jasotzen jariotzea.
Hurrengo urratsak
Egin FixVibe eskaneatze bat zure ekoizpen-URLaren aurka — biltegiratze-zerrendatze anonimoak baas.supabase-storage-public azpian agertzen dira. Bikoiztu zerrenda hau Supabase RLS eskanerra taula-geruzarako eta Supabase service role gakoa JavaScript-en agerian gako-agerpenaren auzotasunarekin. Beste BaaS hornitzaileen biltegiratze-konfigurazio okerrak ezagutzeko, ikus BaaS konfigurazio okerren eskanerra.
