Monitorovanie AI-generovaného kódu — prečo jednorazový sken nestačí
Kód, ktorý nikto nedržal celý v hlave
Aplikácia poskladaná s výraznou pomocou AI asistenta má jednu vlastnosť, ktorú ručne písaný projekt nemá v rovnakej miere: nikto — ani človek, ani model — nedrží v hlave všetky rozhodnutia, ktoré do nej vstúpili. Model navrhne závislosť vo verzii, ktorú poznal z tréningových dát, nie tú najnovšiu. Vygeneruje konfiguračný súbor podľa bežného vzoru, ktorý sa neskontroluje riadok po riadku, pretože „funguje“. Vytvorí testovací endpoint, ktorý mal zmiznúť pred nasadením a nezmizol. Nejde o nedbalosť jednotlivca — je to dôsledok toho, že tempo generovania kódu je vyššie než tempo, ktorým ho niekto stihne skutočne prečítať a posúdiť.
Prečo sa to správa inak než ručne písaný projekt
Niekoľko mechanizmov, ktoré sa opakujú naprieč AI-asistovaným vývojom:
- Závislosti prišpendlené k tomu, čo navrhol model — verzie knižníc zodpovedajú tréningovým dátam modelu, nie aktuálnemu stavu bezpečnostných záplat. Bez explicitnej kontroly zostávajú takéto verzie v projekte mesiace.
- Vygenerovaná konfigurácia okopírovaná bez revízie — CORS pravidlá, bezpečnostné hlavičky, ukážkové
.envsúbory. Fungujú, tak sa ďalej nerieši. - Preview a staging nasadenia, ktoré zostanú bežať — rýchla iterácia znamená viac nasadení, viac subdomén, viac vecí, na ktoré sa po pár týždňoch zabudne.
- Secrets a debug endpointy, ktoré prežijú do produkcie — vygenerovaný debug panel alebo testovací kľúč, ktorý mal byť len dočasný.
- Zmeny sa nasadzujú rýchlejšie, než ich niekto stihne skontrolovať — review cyklus, ktorý predtým brzdil každú zmenu, sa s AI asistenciou skracuje alebo mizne úplne.
Žiadna z týchto vecí nie je exotická chyba. Je to dôsledok rýchlosti — a rýchlosť je presne to, prečo sa ľudia k AI asistencii vôbec uchyľujú.
Prečo jednorazový sken nestačí
Jednorazový bezpečnostný sken je výrok o stave kódu v jednom okamihu. Pri projekte, ktorý sa mení týždeň čo týždeň — často s viacerými nasadeniami za deň, než starší tím spravil za mesiac — je platnosť takého výroku krátka. Otázka, na ktorú chcete poznať odpoveď, nie je „je to bezpečné teraz?“ Je to „keď to bezpečné byť prestane, za ako dlho sa to dozviem?“
Jednorazový sken na túto otázku odpovedať nedokáže — nemá sa s čím porovnávať. Riešením nie je „skenovať dôkladnejšie“, ale skenovať opakovane a porovnávať výsledok s tým, čo bolo včera.
Čo denné sledovanie mení
Watch pri prvom skene uloží stav domény ako východiskovú líniu — aké hlavičky server posiela, či beží HTTPS, aké súbory sú dostupné, ako vyzerajú DNS a e-mailové autentizačné záznamy. Potom ho každý deň znovu spustí a výsledok porovná s predchádzajúcim. Keď sa niečo zmení spôsobom, ktorý stojí za pozornosť, príde upozornenie hneď — nie až pri ďalšom ručnom skene, ktorý možno nikto nespustí. Raz mesačne navyše príde súhrnný prehľad bez ohľadu na to, či sa počas mesiaca niečo stalo.
Rozdiel oproti jednorazovému skenu nie je v tom, že by Watch videl viac vecí. Je v tom, že vidí to isté opakovane a vie povedať, kedy sa to zmenilo.
Čo to konkrétne zachytí
Niekoľko reálnych príkladov toho, čo denné porovnávanie aktuálne dokáže odhaliť:
- Novo vystavený súbor. Vygenerovaný
.env, zabudnutá záloha konfigurácie alebo otvorený directory listing, ktorý sa objaví po nasadení a včera tam nebol. - Uniknutý API kľúč AI poskytovateľa v klientskom kóde. Kľúč k OpenAI, Anthropic alebo Google API vložený priamo do frontendu — typický artefakt rýchleho prototypovania, keď sa kľúč „dočasne“ nastaví na klientovi a zostane tam.
- Certifikát, ktorý začína vypršiavať alebo vypršal. Časté pri preview a staging doménach, na ktoré sa po skončení iterácie prestane siahať.
- Oslabenie e-mailovej autentizácie. Zmena DNS záznamov (aj vedľajšia, pri úprave inej infraštruktúry) môže vypnúť alebo oslabiť SPF/DMARC — Watch to zachytí ako regresiu oproti predchádzajúcemu stavu.
- Vložený škodlivý skript. Keď sa do webu dostane cudzí kód, ďalšia denná kontrola to uvidí ako nový nález, nie až za mesiac.
- Skok v celkovej závažnosti nálezov, aj keď ho nemožno presne priradiť jednej konkrétnej kontrole.
Čo Watch nerobí
Watch je pasívne, externé a black-box pozorovanie — číta len to, čo server sám zverejňuje bežnému návštevníkovi: HTTP hlavičky, TLS handshake, verejne dostupné súbory, DNS a e-mailové záznamy. Neprihlasuje sa, neprechádza zdrojový kód, nie je to statická analýza (SAST) ani code review. Nevidí dovnútra aplikácie — neskontroluje logiku, ktorú model napísal, ani závislosti, ktoré zvonka vidieť nie sú.
To má konkrétny dôsledok: dnešná denná sada kontrol nepokrýva všetko, čo pri AI-asistovanom vývoji bolí najviac. Zastarané JavaScriptové knižnice na frontende, prihlasovací formulár odoslaný cez nešifrované HTTP alebo visiaci CNAME záznam po zrušenom preview nasadení (subdomain takeover) sú presne ten typ rizika, ktorý má continuous monitoring zmysel sledovať — a v tejto chvíli nie sú súčasťou dennej kontroly Watch. Kontrolnú sadu postupne rozširujeme; kým to tak nie je, radšej to povieme rovno, než aby sme nechali dojem, že Watch sleduje viac, než v skutočnosti sleduje.
Zhrnutie
Hodnota continuous monitoringu pri AI-generovanom kóde nie je v tom, že by nahradil code review alebo pokryl každú triedu rizika. Je v tom, že mení otvorenú úzkosť „neviem, čo všetko tam je“ na ohraničenú otázku: za ako dlho sa dozviem, že sa niečo z toho, čo Watch vidí, zmenilo k horšiemu.