FixVibe

// docs / baas security / supabase storage

Rhestr wirio diogelwch bwced storio Supabase: 22 eitem

Mae Storio Supabase yn amlapiad tenau o gwmpas bwced sy'n gydnaws ag S3 ynghyd â'r un model Diogelwch ar Lefel Rhes â'r gronfa ddata. Mae hynny'n golygu bod yr un peryglon RLS sy'n effeithio ar dablau yn effeithio ar fynediad ffeiliau — ac ychydig sy'n benodol i storio sy'n ymddangos pan fydd offer codio AI yn gwifrio uwchlwythiadau. Mae'r rhestr wirio hon yn 22 eitem ar draws pum adran: cyfluniad bwced, polisïau RLS, dilysu uwchlwytho, URLs llofnodedig, a hylendid gweithredol. Mae pob un yn ddilysadwy mewn llai na 15 munud.

Mae pob eitem isod yn hanfodol. Am y mecaneg RLS sylfaenol, gweler Sganiwr RLS Supabase. Am y dosbarth datguddio allwedd cyfagos i storio, gweler Allwedd service role Supabase wedi'i datgelu yn JavaScript.

Cyfluniad bwced

Dechreua gyda'r diofyn cywir. Mae bwced wedi'i cham-gyflunio'n gollwng ffeiliau a yw dy RLS yn gywir ai peidio.

  1. Diofyn pob bwced i breifat. Yn Bwrdd Gwaith Supabase → Storage → Buckets, gosod y togl Public bucket i ffwrdd oni bai bod gennyt reswm penodol (asedau marchnata, afatariaid cyhoeddus heb PII). Mae bwcedi cyhoeddus yn osgoi RLS ar gyfer gweithrediadau darllen — gall unrhyw un ag enw'r bwced restru a lawrlwytho.
  2. Gosod terfyn maint ffeil caled ar bob bwced. Bwrdd Gwaith → Gosodiadau bwced → Terfyn maint ffeil. Mae 50 MB yn ddiofyn synhwyrol ar gyfer uwchlwythiadau defnyddwyr; codi'n fwriadol ar gyfer achosion defnyddio fideo / ffeiliau mawr. Heb derfyn, gall un uwchlwythiad maleisus ddisbyddu dy gwota storio neu dy fand-led misol.
  3. Cyfyngu mathau MIME a ganiateir fesul bwced. Rhestr mathau MIME a ganiateir — rhestr ganiatáu benodol, nid rhestr atal. image/jpeg, image/png, image/webp ar gyfer bwcedi delwedd-yn-unig. Byth caniatáu text/html, application/javascript, neu image/svg+xml mewn bwced cynnwys-defnyddiwr — maent yn gweithredu yn y porwr pan fyddant yn cael eu gwasanaethu trwy URL llofnodedig.
  4. Defnyddia un bwced fesul math o gynnwys, nid un bwced wedi'i rannu. Gosodiadau fesul bwced (maint, mathau MIME, polisïau RLS) yw'r gronynnedd sydd gennyt. Mae bwced user-avatars, bwced document-uploads, a bwced public-assets yn haws eu cloi i lawr nag un bwced wedi'i gymysgu.
  5. Dilysa gyfluniad CORS os yw'r blaen yn uwchlwytho. Os yw defnyddwyr yn uwchlwytho'n uniongyrchol o'r porwr i URL llofnodedig, rhaid i CORS y bwced restru dy darddiad cynhyrchu. Mae * yn dderbyniol ar gyfer bwcedi cyhoeddus yn unig — byth ar gyfer bwcedi sy'n cynnwys PII defnyddwyr.

Polisïau RLS ar storage.objects

Mae Storio Supabase yn storio metaddata ffeiliau yn y tabl storage.objects. Mae RLS ar y tabl hwnnw'n rheoli pwy all ddarllen, uwchlwytho, diweddaru, neu ddileu ffeiliau. Heb RLS, fflag cyhoeddus/preifat y bwced yw dy unig amddiffyniad.

  1. Cadarnha fod RLS wedi'i alluogi ar storage.objects. Rhaid i SELECT rowsecurity FROM pg_tables WHERE schemaname = 'storage' AND tablename = 'objects'; ddychwelyd true. Mae Supabase yn ei alluogi'n ddiofyn ar brosiectau newydd; dilysa nad yw wedi'i analluogi.
  2. Ysgrifenna bolisi SELECT wedi'i gwmpasu i auth.uid() ar gyfer bwcedi preifat. CREATE POLICY "users_read_own_files" ON storage.objects FOR SELECT USING (auth.uid()::text = (storage.foldername(name))[1]);. Y confensiwn yw storio ffeiliau o dan [user-id]/[filename] a defnyddio storage.foldername() i echdynnu'r perchennog o'r llwybr.
  3. Ysgrifenna bolisi INSERT sy'n gorfodi'r un confensiwn llwybr. CREATE POLICY "users_upload_own" ON storage.objects FOR INSERT WITH CHECK (auth.uid()::text = (storage.foldername(name))[1]);. Heb WITH CHECK, gall defnyddiwr wedi'i ddilysu uwchlwytho i ffolder defnyddiwr arall.
  4. Ychwanega bolisïau UPDATE a DELETE os yw dy ap yn cefnogi golygiadau neu ddileu ffeiliau. Mae angen ei bolisi ei hun ar bob gorchymyn. Mae hepgor DELETE yn golygu na all defnyddwyr wedi'u dilysu dynnu eu ffeiliau eu hunain; mae hepgor UPDATE yn golygu bod ailysgrifennu ffeiliau'n methu'n dawel.
  5. Profa fynediad traws-ddefnyddiwr mewn dwy sesiwn porwr. Cofrestra fel Defnyddiwr A, uwchlwytho ffeil, copïo'r llwybr. Cofrestra fel Defnyddiwr B mewn porwr arall, ceisio nôl y ffeil trwy'r API REST. Rhaid i'r ymateb fod yn 403 neu 404, byth 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]);

Dilysu uwchlwytho

Dilysa bob uwchlwythiad ochr-gwasanaeth, hyd yn oed pan fydd gan y bwced gyfyngiadau MIME a maint. Mae offer codio AI yn cynhyrchu dilysu cleient-yn-unig yn ddiofyn; nid yw hynny'n amddiffyn dim.

  1. Ail-wirio math MIME ochr-gwasanaeth o feitiau gwirioneddol y ffeil, nid y pennawd Content-Type. Defnyddia lyfrgell fel file-type (Node) neu snwffio beit hud. Gall ymosodwr hawlio Content-Type: image/jpeg ar ffeil sy'n llwyth tâl polyglot HTML / JavaScript mewn gwirionedd.
  2. Tynna fetaddata EXIF o ddelweddau a uwchlwythwyd. Gall EXIF gynnwys cyfesurynnau GPS, rhifau cyfresol dyfeisiau, ac amserau. Defnyddia sharp gyda .withMetadata(false) neu exif-parser i'w dynnu cyn storio.
  3. Gwrthod SVGs sy'n cynnwys tagiau script neu drinwyr onload. XML yw SVG — ac mae llawer o apiau a gynhyrchwyd gan AI yn caniatáu uwchlwythiadau SVG fel "dim ond delwedd." Defnyddia DOMPurify ochr-gwasanaeth neu wrthod uwchlwythiadau SVG yn gyfan gwbl.
  4. Defnyddia enwau ffeiliau penderfynol, na ellir eu dyfalu. Paid â chadw enw'r ffeil gwreiddiol. Defnyddia UUID neu stwnsh o gynnwys y ffeil. Mae enwau ffeiliau gwreiddiol yn gollwng ("passport_scan_2024_01_15.jpg") ac mae enwau rhagweladwy'n galluogi rhifo.

URLs llofnodedig

URLs llofnodedig yw sut mae cleientiaid yn cyrchu bwcedi preifat. Mae'r dyddiad dod i ben, cwmpas y bwced, a beth sy'n cael ei gofnodi yn bwysig.

  1. Diofyn dyddiad dod i ben URL llofnodedig i 1 awr neu lai. Mae createSignedUrl(path, expiresIn) SDK JS Supabase yn cymryd eiliadau. Byth defnyddia werthoedd fel 31536000 (un flwyddyn) — mae'r URL yn dod yn ddolen lled-gyhoeddus barhaol.
  2. Byth storio URLs llofnodedig yn dy gronfa ddata. Cynhyrcha rai ffres ochr-gwasanaeth ar bob cais. Mae URL llofnodedig wedi'i storio gyda dyddiad dod i ben blwyddyn sy'n gollwng trwy ddymp cronfa ddata yn rhoi mynediad tymor hir.
  3. Cofnoda gynhyrchu URL llofnodedig, nid uwchlwytho ffeiliau yn unig. Os wyt yn amau cyfaddawd yn ddiweddarach, mae angen i ti wybod pwy a gynhyrchodd ba URL pryd. Cofnoda auth.uid() + bwced + llwybr gwrthrych + amser.
  4. Defnyddia'r opsiwn downloadAs wrth wasanaethu ffeiliau a uwchlwythwyd gan ddefnyddwyr. Mae createSignedUrl(path, expiresIn, { download: '.jpg' }) yn gorfodi pennawd Content-Disposition: attachment fel bod y ffeil yn lawrlwytho yn lle rendro — yn trechu'r dosbarth gweithredu HTML / SVG / HTML-mewn-PDF.

Hylendid gweithredol

Mae cyfluniad storio'n drifftio dros amser. Mae'r pedair eitem weithredol hyn yn cadw'r wyneb yn dynn.

  1. Archwilia fwcedi'n chwarterol. Bwrdd Gwaith → Storage → Buckets. Cadarnha fod cyflwr cyhoeddus/preifat a rhestrau math MIME yn cyfateb i'r hyn y mae'r ap yn ei ddisgwyl. Mae bwcedi a grëwyd "dros dro" yn dod yn barhaol os nad oes neb yn eu tynnu.
  2. Monitra weithrediadau rhestru anhysbys. Mae logiau storio (Bwrdd Gwaith → Logs → Storage) yn cofnodi ceisiadau LIST. Mae sbeic o geisiadau rhestru anhysbys yn erbyn bwced preifat yn golygu bod rhywun yn ei brofi o'r tu allan.
  3. Gosod polisi cadw ar gyfer uwchlwythiadau byrhoedlog. Dylai bwcedi dros dro (rhagolwg delwedd, uwchlwythiadau drafft) auto-ddileu ar ôl 24-72 awr trwy ffwythiant wedi'i amserlennu. Mae cadw amhenodol yn rhwymedigaeth o dan rwymedigaethau lleihau-data GDPR / CCPA.
  4. Rheda sgan FixVibe yn fisol. Mae'r gwiriad baas.supabase-storage-public yn archwilio bwcedi sy'n ymateb i GET + LIST anhysbys. Mae bwcedi newydd yn cael eu hychwanegu; mae rhai hen yn newid gwelededd — dim ond sganio parhaus sy'n dal y drifft.

Camau nesaf

Rheda sgan FixVibe yn erbyn dy URL cynhyrchu — mae rhestrau storio anhysbys yn ymddangos o dan baas.supabase-storage-public. Cyplysa'r rhestr wirio hon gyda Sganiwr RLS Supabase ar gyfer yr haen tabl a Allwedd service role Supabase wedi'i datgelu yn JavaScript ar gyfer y gyffinedd datguddio allwedd. Am gam-gyfluniadau storio ar draws darparwyr BaaS eraill, gweler Sganiwr cam-gyfluniad BaaS.

// sganio dy wyneb baas

Canfod y tabl agored cyn i rywun arall wneud.

Gollwng URL cynhyrchu i mewn. Mae FixVibe yn rhifo'r darparwyr BaaS y mae dy ap yn siarad â hwy, yn olrhain eu pwyntiau terfyn cyhoeddus, ac yn adrodd ar yr hyn y gall cleient heb ei ddilysu ei ddarllen neu ei ysgrifennu. Am ddim, dim gosod, dim cerdyn.

  • Haen am ddim — 3 sgan / mis, dim cerdyn cofrestru.
  • Olrhain BaaS goddefol — dim angen dilysu parth.
  • Supabase, Firebase, Clerk, Auth0, Appwrite, a mwy.
  • Awgrymiadau trwsio AI ar bob canfyddiad — gludo'n ôl i Cursor / Claude Code.
Rhedeg sgan BaaS am ddim

dim angen cofrestru

Rhestr wirio diogelwch bwced storio Supabase: 22 eitem — Docs · FixVibe