Trumpai
AI parašytas kodas dažniausiai veikia. Problema yra tai, kas gali pasiekti duomenis. 2026 m. audite, apėmusiame 200 paskelbtų vibe coding programų, 91 % turėjo bent vieną pažeidžiamumą, o didžiausia grupė buvo sugedusi prieigos kontrolė. Atkartojau penkias iš šių prieigos spragų vietinėje Supabase aplinkoje: vien su viešuoju raktu lentelė be RLS, visada teisinga politika, view ir nutekėjęs secret key kiekvienas atidavė visas 3 eilutes iš 3. Pirmiausia patikrinkite savo programą dėl šių dalykų.
Esu Denys, full-stack ir AI inžinierius. Taisau programas, sukurtas su Lovable, Bolt, Cursor ar Claude Code, ir dauguma jų veikia ant Supabase. Šiame straipsnyje surinkta, ką apie vibe coding saugą sako paskelbti tyrimai ir ką pamačiau, kai sąmoningai atkartojau dažniausias klaidas.
Kokios yra vibe coding saugos rizikos?
Pagrindinė rizika yra sugedusi prieigos kontrolė: duomenys, kuriuos bet kuris lankytojas gali skaityti ar keisti, nes taisyklės, kuri turėtų jį sustabdyti, nėra, ji per laisva arba apeinama. Toliau seka injekcijos ir silpna autentifikacija. Trys nepriklausomi tyrimai rodo tą patį:
| Tyrimas | Ką tikrino | Ką rado |
|---|---|---|
| Deng, Fan ir Meng, arXiv 2606.23130, 2026 m. birželis | 200 paskelbtų programų, sukurtų su Claude Code ir Lovable, audituotų rankiniu būdu ir agentais | 182 iš 200 programų (91 %) turėjo bent vieną pažeidžiamumą; 65,77 % iš 1186 radinių buvo Critical arba High; sugedusi prieigos kontrolė buvo didžiausia kategorija, 64 % programų |
| Escape, 2025 m. spalis | 5600 viešų programų iš Lovable, Base44, Create.xyz ir kitų, pasyvus skenavimas | daugiau nei 2000 didelio poveikio pažeidžiamumų, daugiau nei 400 atskleistų paslapčių, 175 atvejai su atskleistais asmens duomenimis; pagrindinė priežastis buvo neteisingai sukonfigūruotos teisės, ypač Supabase RLS |
| Veracode GenAI Code Security Report, 2025 ir 2026 m. | 80 programavimo užduočių, duotų daugiau nei 100 modelių | 2025 m. saugų kodą pateikė tik 55 % užduočių; 2026 m. vidutinis išlaikymo rodiklis buvo 56 %, nepriklausomai nuo modelio dydžio ir metų tas pats |
Tyrimai matuoja skirtingus dalykus, todėl procentai nesusideda į vieną skaičių. Juos jungia bendras vaizdas: kodas veikia, o spragos yra ties pasitikėjimo riba.
Kurias spragas atkartojau?
Vietinėje Supabase aplinkoje (CLI 2.109.1, Postgres 17.6, PostgREST 14.14) sukūriau vieną lentelę orders su trimis išgalvotų klientų eilutėmis. Tada kviečiau Data API taip, kaip tai daro naršyklė, su publishable key, kurį pateikia kiekvienas Supabase frontend, ir kaskart keičiau tik vieną dalyką.
| Nustatymas | Ką gavo viešasis raktas | Kodėl |
|---|---|---|
| Lentelė be RLS | Visas 3 eilutes, o įterpimas grąžino 201 Created |
Numatytosios teisės leidžia anon skaityti ir rašyti, o eilučių niekas nefiltruoja |
| RLS įjungtas, politikos nėra | [], tuščias sąrašas |
RLS be politikos viską draudžia anon ir authenticated |
Politika using (true) |
Visas 3 eilutes | Politika yra, todėl lentelė atrodo apsaugota, bet ji leidžia kiekvieną eilutę |
| View virš apsaugotos lentelės | Visas 3 eilutes | View veikia su savininko teisėmis, jei neturi security_invoker = true; su juo rezultatas [] |
| Secret key frontend kode | Visas 3 eilutes | Secret key atitinka service_role, kuri turi BYPASSRLS |
Antra eilutė yra pavojingas momentas. RLS įjungtas, o programa rodo tuščią sąrašą, todėl atrodo sugedusi. Greičiausias promptas, kuris tai „pataiso”, yra politika, leidžianti viską, tai yra trečia eilutė. Šis ciklas, klaida, o paskui pataisymas, plečiantis prieigą, yra modelis, kurį vibe coding programose sutinku dažniausiai, ir todėl „RLS įjungtas” pats savaime pasako mažai.
Kodėl AI parašytas kodas nesusitvarko su prieigos kontrole?
Agentas apdovanojamas už kodą, kuris veikia. Tuščias sąrašas ar 401 atrodo kaip klaida, o pataisymas, kuris ją paslepia, dažnai yra tas, kuris atveria prieigą. arXiv tyrimas savo 1186 radinius sieja su aštuoniais pasikartojančiais gedimų tipais, sugrupuotais kaip agentų atminties, tikslo ir žinių defektai, ir nustatė, kad geresnis promptų rašymas spragų sumažino, bet jų nepašalino.
Antra priežastis yra architektūra. Lovable ar Bolt programa dažniausiai neturi savo backend: naršyklė su duomenų baze kalbasi tiesiai per Data API. Kiekviena taisyklė, saugojanti klientų duomenis, turi gyventi Postgres, kaip teisės (grants), politikos ir funkcijos, o programos peržiūroje, kur esate prisijungęs kaip savininkas, nieko iš to nesimato. Supabase keičia vieną numatytąjį nustatymą: nuo 2026 m. spalio 30 d. naujoms esamų projektų lentelėms Data API teisės automatiškai nebesuteikiamos. Mano aplinkoje lentelė be teisės atsakė 42501 permission denied su užuomina, nurodančia trūkstamą GRANT. Tai sustabdys pirmą aukščiau pateiktos lentelės eilutę naujoms lentelėms, bet ne likusias keturias ir ne jau esamas lenteles.
Kas dar negerai už duomenų bazės ribų?
Tie patys tyrimai išvardija rizikas, neturinčias nieko bendra su RLS:
- Paslaptys bundle. Escape rado daugiau nei 400 atskleistų paslapčių, įskaitant OpenAI raktus ir mokėjimų administravimo raktus. Viskas, kas išsiunčiama į naršyklę, yra vieša.
- Maršrutų apsauga tik React. Puslapis, nukreipiantis neprisijungusius vartotojus, palieka už savęs API, atsakantį visiems.
- Užklausų limitai, kurie niekada nesuveikia. Talpinamame Supabase projekte, kurį tikrinau, edge function atmintyje laikomas skaitiklis per kiekvieną užklausą atsistatydavo į pradinę reikšmę. Tai aprašiau savo Lovable programos saugos sąraše.
- Senos bibliotekos. Escape viešuose ištekliuose suskaičiavo 254 pažeidžiamus JavaScript bibliotekų egzempliorius, dažnai paveldėtus iš šablonų.
Kaip patikrinti vibe coding programą?
- Atidarykite programą, atidarykite DevTools → Network ir suraskite užklausas į
/rest/v1/. Nukopijuokite vieną kaip cURL, pašalinkite antraštęAuthorization, palikiteapikeyir paleiskite. Jei duomenys grįžta, jie grįš kiekvienam. - Ieškokite sukompiliuotame JavaScript
sb_secret_irservice_role. Radinys yra raktas, kurį reikia pakeisti šiandien. - Paleiskite nemokamą Supabase saugos tikrintuvą. Jis nuskaito projekto katalogą ir tarp savo 46 taisyklių pažymi „RLS išjungtas atskleistose lentelėse”, „Politikos, leidžiančios visas eilutes”, „Vaizdai, apeinantys RLS” ir „Numatytosios teisės, kurios atveria naujus objektus API”: pirmas keturias aukščiau pateiktos lentelės eilutes.
- Testuokite su dviem vartotojais dviejose įmonėse, vieninteliu testu, kurio skeneris už jus neatliks. Kaip tai darau aš, aprašyta Lovable sąraše, o kaip testuoju Supabase RLS parodo metodą gamybinėje programoje su leidimų ekranu.
curl 'https://<project>.supabase.co/rest/v1/orders?select=*' \
-H 'apikey: <the publishable key from your page>'
Ko tai neįrodo
Mano atkartojimas yra viena lentelė vietinėje aplinkoje, sukurta parodyti kiekvieną mechanizmą, o ne tikrų programų skenavimas. Paplitimo skaičiai paimti iš trijų tyrimų, kiekvienas turi savo imtį ir metodą, nuorodos pateiktos aukščiau. O švarus rezultatas šiose penkiose patikrose programos nepadaro saugios: loginėms klaidoms, pavyzdžiui, apsaugai, praleidžiančiai trūkstamą reikšmę, reikia savo testų. Viena tokių yra NULL, praleidęs leidimo patikrą.
Sukūrėte programą su AI įrankiu?
Mielai palyginsiu patirtį, ką tikrinti pirmiausia. Be pardavimų kalbų.
Susisiekti