Pāriet uz saturu

Vibe coding drošības riski: 5 robi, ko atkārtoju

Skatīt kā MarkdownAtvērt pakalpojumā ClaudeAtvērt pakalpojumā ChatGPTAtvērt pakalpojumā Perplexity

Jautājums tiek arī nokopēts. Ja tērzēšana atveras tukša, ielīmējiet to.

Īsumā

AI uzrakstītais kods parasti darbojas. Problēma ir tajā, kam ir piekļuve datiem. 2026. gada auditā, kurā bija 200 publicētu ar vibe coding veidotu lietotņu, 91 % bija vismaz viena ievainojamība, un lielākā grupa bija bojāta piekļuves kontrole. Es atkārtoju piecus no šiem piekļuves robiem lokālā Supabase vidē: tikai ar publisko atslēgu tabula bez RLS, vienmēr patiesa politika, skats un noplūdusi secret key katra atdeva visas 3 rindas no 3. Pārbaudiet savu lietotni vispirms pret šiem robiem.

Esmu Denys, full-stack un AI inženieris. Esmu labojis lietotnes, kas veidotas ar Lovable, Bolt, Cursor vai Claude Code, un lielākā daļa no tām darbojas uz Supabase. Šajā rakstā ir apkopots, ko publicētie pētījumi saka par vibe coding drošību un ko es redzēju, kad tīši pārbūvēju izplatītākās kļūdas.

Kādi ir vibe coding drošības riski?

Galvenais risks ir bojāta piekļuves kontrole: dati, ko jebkurš apmeklētājs var lasīt vai mainīt, jo noteikums, kam vajadzētu viņu apturēt, trūkst, ir pārāk vaļīgs vai tiek apiets. Tālāk seko injekcijas un vāja autentifikācija. Trīs neatkarīgi pētījumi rāda uz to pašu:

Pētījums Ko pārbaudīja Ko atrada
Deng, Fan un Meng, arXiv 2606.23130, 2026. gada jūnijs 200 publicētas lietotnes, veidotas ar Claude Code un Lovable, auditētas ar rokām un ar aģentiem 182 no 200 lietotnēm (91 %) bija vismaz viena ievainojamība; 65,77 % no 1186 atradumiem bija Critical vai High; bojāta piekļuves kontrole bija lielākā kategorija, 64 % lietotņu
Escape, 2025. gada oktobris 5600 publiskas lietotnes no Lovable, Base44, Create.xyz un citām, pasīvā skenēšana vairāk nekā 2000 ievainojamību ar lielu ietekmi, vairāk nekā 400 atklātu noslēpumu, 175 gadījumi ar atklātiem personas datiem; galvenais cēlonis bija nepareizi iestatītas tiesības, īpaši Supabase RLS
Veracode GenAI Code Security Report, 2025 un 2026 80 programmēšanas uzdevumi, ko izpildīja vairāk nekā 100 modeļu 2025. gadā drošu kodu deva tikai 55 % uzdevumu; 2026. gadā vidējais izturēšanas rādītājs bija 56 %, nemainīgs neatkarīgi no modeļa izmēra un gada

Pētījumi mēra dažādas lietas, tāpēc procenti neveido vienu skaitli. Kopīga ir to aina: kods darbojas, un robi atrodas uz uzticamības robežas.

Kurus robus es atkārtoju?

Lokālā Supabase vidē (CLI 2.109.1, Postgres 17.6, PostgREST 14.14) izveidoju vienu tabulu orders ar trim izdomātu klientu rindām. Tad izsaucu Data API tā, kā to dara pārlūks, ar publishable key, ko piegādā katrs Supabase frontend, un katru reizi mainīju tikai vienu lietu.

Ko publiskā atslēga ieguva no vienas tabulas. Lokāls Supabase, 3 izdomātu pasūtījumu rindas, katrs pieprasījums vienreiz. Tabula bez RLS: Publishable key → orders, RLS izslēgts → 3 no 3 rindām; RLS ieslēgts, politikas vēl nav: Publishable key → orders, RLS ieslēgts → 0 rindu; Politika using (true): Publishable key → using (true) → 3 no 3 rindām; Skats bez security_invoker: Publishable key → order_summary skats → 3 no 3 rindām; Secret key pārlūka kodā: Secret key → BYPASSRLS → 3 no 3 rindām.
1. attēls. Mana reprodukcija lokālā Supabase vidē (Postgres 17.6, PostgREST 14.14), 2026. gada 23. oktobris.
Iestatījums Ko ieguva publiskā atslēga Kāpēc
Tabula bez RLS Visas 3 rindas, un ievietošana atgrieza 201 Created Noklusējuma tiesības ļauj anon lasīt un rakstīt, un neviens nefiltrē rindas
RLS ieslēgts, politikas nav [], tukšs saraksts RLS bez politikas liedz visu anon un authenticated
Politika using (true) Visas 3 rindas Politika pastāv, tāpēc tabula šķiet aizsargāta, taču tā atļauj katru rindu
Skats virs aizsargātas tabulas Visas 3 rindas Skats darbojas ar īpašnieka tiesībām, ja tam nav security_invoker = true; ar to rezultāts ir []
Secret key frontend kodā Visas 3 rindas Secret key atbilst service_role, kam ir BYPASSRLS

Otrā rinda ir bīstamais brīdis. RLS ir ieslēgts, un lietotne rāda tukšu sarakstu, tāpēc šķiet, ka tā ir salauzta. Ātrākā uzvedne, kas to “salabo”, ir politika, kas atļauj visu, tas ir, trešā rinda. Šis cikls, kļūda un pēc tam labojums, kas paplašina piekļuvi, ir paraugs, ko vibe coding lietotnēs sastopu visbiežāk, un tieši tāpēc “RLS ir ieslēgts” pats par sevi pasaka maz.

Kāpēc AI uzrakstīts kods neiztur piekļuves kontroli?

Aģentu atalgo par kodu, kas darbojas. Tukšs saraksts vai 401 izskatās pēc kļūdas, un labojums, kas to padara neredzamu, bieži ir tas, kas atver piekļuvi. arXiv pētījums savus 1186 atradumus izseko līdz astoņiem atkārtotiem kļūmju veidiem, sagrupētiem kā aģentu atmiņas, mērķa un zināšanu defekti, un atrada, ka labāka uzvedņu rakstīšana samazināja robu skaitu, bet neizskauda tos.

Otrs iemesls ir arhitektūra. Lovable vai Bolt lietotnei parasti nav sava backend: pārlūks runā ar datubāzi tieši, izmantojot Data API. Katram noteikumam, kas sargā klientu datus, jādzīvo Postgres, kā tiesībām (grants), politikām un funkcijām, un nekas no tā nav redzams lietotnes priekšskatījumā, kur esat pieteicies kā īpašnieks. Supabase maina vienu noklusējumu: no 2026. gada 30. oktobra esošo projektu jaunajām tabulām Data API tiesības vairs netiek piešķirtas automātiski. Manā vidē tabula bez tiesībām atbildēja ar 42501 permission denied un norādi, kas nosauc trūkstošo GRANT. Tas apturēs augstāk esošās tabulas pirmo rindu jaunām tabulām, bet ne pārējās četras un ne jau esošās tabulas.

Kas vēl noiet greizi ārpus datubāzes?

Tie paši pētījumi uzskaita riskus, kam ar RLS nav sakara:

  • Noslēpumi bundle. Escape atrada vairāk nekā 400 atklātu noslēpumu, tostarp OpenAI atslēgas un maksājumu administratora atslēgas. Viss, kas nonāk pārlūkā, ir publisks.
  • Maršrutu aizsardzība tikai React. Lapa, kas novirza nepieteikušos lietotājus, atstāj aiz sevis API, kas atbild ikvienam.
  • Ātruma ierobežojumi, kas nekad nenostrādā. Hostētā Supabase projektā, ko pārbaudīju, edge function atmiņā glabāts skaitītājs atiestatījās katrā pieprasījumā. To aprakstīju savā Lovable lietotnes drošības kontrolsarakstā.
  • Vecas bibliotēkas. Escape publiskajos resursos saskaitīja 254 ievainojamus JavaScript bibliotēku gadījumus, bieži mantotus no veidnēm.

Kā pārbaudīt vibe coding lietotni?

  1. Atveriet lietotni, atveriet DevTools → Network un atrodiet pieprasījumus uz /rest/v1/. Nokopējiet vienu kā cURL, noņemiet galveni Authorization, atstājiet apikey un palaidiet. Ja dati atnāk atpakaļ, tie atnāks ikvienam.
  2. Meklējiet uzbūvētajā JavaScript sb_secret_ un service_role. Sakritība ir atslēga, kas jānomaina šodien.
  3. Palaidiet bezmaksas Supabase drošības pārbaudi. Tā nolasa projekta katalogu un starp saviem 46 noteikumiem atzīmē “RLS izslēgts atklātajām tabulām”, “Politikas, kas atļauj visas rindas”, “Skati, kas apiet RLS” un “Noklusējuma tiesības, kas atver jaunus objektus API”: augstāk esošās tabulas pirmās četras rindas.
  4. Testējiet ar diviem lietotājiem divos uzņēmumos, vienīgo testu, ko skeneris jūsu vietā izdarīt nevar. Kā to daru es, ir Lovable kontrolsarakstā, bet kā es testēju Supabase RLS parāda metodi produkcijas lietotnē ar atļauju ekrānu.
curl 'https://<project>.supabase.co/rest/v1/orders?select=*' \
  -H 'apikey: <the publishable key from your page>'

Ko tas neparāda

Mana reprodukcija ir viena tabula lokālā vidē, veidota, lai parādītu katru mehānismu, nevis reālu lietotņu skenēšana. Izplatības skaitļi nāk no trim pētījumiem, katram ir sava izlase un metode, saites ir augstāk. Un tīrs rezultāts šajās piecās pārbaudēs nepadara lietotni drošu: loģikas kļūdām, piemēram, aizsardzībai, kas laiž cauri trūkstošu vērtību, vajag savus testus. Viena no tām ir NULL, kas izlaida atļaujas pārbaudi.

Izveidojāt lietotni ar AI rīku?

Labprāt salīdzināšu pieredzi par to, ko pārbaudīt vispirms. Bez pārdošanas sarunas.

Sazināties

© 2026 Denys Zaichenko. Oriģinālais raksts: https://madsalt.tech/lv/blog/vibe-coding-security-risks/