Sari la conținut

Securitate · AI

Cod generat de AI în câteva minute: de la prototip rapid la o vulnerabilitate XSS critică

Asistenții AI precum Cursor construiesc rapid, dar optimizează pentru funcționalitate, nu pentru securitate. Cum apare un Stored XSS și cum îl prevenim.

Vezi pe YouTube ↗ La redare, clipul încarcă YouTube în browserul tău.

Cuprins

Asistenții de codare bazați pe inteligență artificială, precum Cursor, au schimbat radical viteza cu care putem construi aplicații. În doar câteva minute, poți trece de la o simplă idee la un produs funcțional, gata de livrare în producție.

I-ai cerut un sistem de autentificare și o secțiune de recenzii sau comentarii? AI-ul ți le construiește pe ambele instant. Totul arată impecabil, aplicația rulează, iar interfața răspunde prompt. Însă există o problemă majoră pe care majoritatea creatorilor o ignoră: AI-ul optimizează pentru funcționalitate, nu pentru securitate.

În clipul de mai sus am făcut un experiment practic pe canalul nostru de YouTube, ca să arătăm cât de ușor poate fi compromisă o astfel de aplicație creată cu AI.

Cum se fură un token prin Stored XSS

Atunci când ceri unui asistent AI să îți creeze rapid un modul de comentarii sau recenzii, acesta va prioritiza afișarea datelor pe ecran. Dacă codul generat nu include mecanisme de sanitizare și escapare a datelor introduse de utilizatori, aplicația devine vulnerabilă la atacuri de tip Stored XSS (Cross-Site Scripting).

Cum funcționează atacul

Scenariul este surprinzător de simplu:

  1. Atacul invizibil. Un atacator nu trebuie să spargă baza de date. Este suficient să lase o recenzie sau un comentariu aparent banal, care conține un tag HTML modificat.
  2. Execuția codului. Atunci când un alt utilizator — sau chiar un administrator — deschide pagina, browserul interpretează acel conținut ca marcaj, nu ca text, și rulează scriptul ascuns în el.
  3. Compromiterea contului. Scriptul poate extrage instantaneu token-ul de sesiune sau cookie-urile de autentificare din browser și le trimite către serverul atacatorului, fără ca victima să bănuiască ceva.

Pasul cu pasul, pe o aplicație reală livrată în producție, îl arătăm în clipul de mai sus.

De ce uneltele AI nu sunt suficiente pentru producție

AI-ul este un accelerator extraordinar pentru dezvoltare, dar nu înțelege contextul de securitate al afacerii tale. Dacă instrucțiunea ta inițială a fost doar „fă-mi un login și o secțiune de recenzii”, AI-ul nu va adăuga de la sine măsuri complexe de securitate.

Principalele riscuri când te bazezi 100% pe cod generat automat:

  • Lipsește validarea riguroasă a datelor de intrare (input validation).
  • Output-ul este randat ca HTML brut, fără sanitizare.
  • Token-urile de autentificare sunt adesea stocate nesigur — de exemplu în localStorage, ceea ce le face vulnerabile la scripturi XSS.

Viteza de dezvoltare e crucială azi, dar o breșă de securitate îți poate distruge reputația într-o secundă.

Cum securizăm aplicațiile la guwAPI

La guwAPI folosim tehnologia la maximum, dar aplicăm un filtru strict de inginerie și securitate peste orice linie de cod. Pentru a preveni atacurile XSS și furtul de token-uri, urmăm câteva reguli esențiale.

Cum prevenim asta

1. Sanitizarea strictă a datelor. Nicio informație introdusă de utilizator nu este afișată fără a fi filtrată și escapată. Randarea ca text, nu ca HTML, este linia de apărare implicită:

// Riscant: randezi HTML brut primit de la utilizator
<div dangerouslySetInnerHTML={{ __html: review.body }} />

// Sigur: randezi ca text — framework-ul escapează automat
<div>{review.body}</div>

2. Cookie-uri HttpOnly. Stocăm token-urile în cookie-uri securizate, inaccesibile pentru JavaScript din browser — deci un XSS nu le poate citi:

res.cookie("session", token, {
  httpOnly: true, // inaccesibil din document.cookie
  secure: true,   // doar prin HTTPS
  sameSite: "strict",
});

3. Politici CSP (Content Security Policy). Configurăm headere de securitate care blochează executarea scripturilor neautorizate, chiar dacă ceva ar scăpa de sanitizare:

Content-Security-Policy: default-src 'self'; script-src 'self'; object-src 'none'; base-uri 'self'

Surse

  1. Cross Site Scripting Prevention Cheat Sheet OWASP
  2. Set-Cookie: HttpOnly MDN Web Docs
  3. Content Security Policy (CSP) MDN Web Docs

Să stăm de vorbă

Spune-mi ce se întâmplă