Una dintre cele mai comune clase de vulnerabilități în site-uri web se numește „Cross-Site Scripting” sau „XSS”. Vulnerabilitățile XSS sunt acolo unde este posibil ca un utilizator să provoace executarea JavaScript. Există o serie de variante diferite ale vulnerabilității XSS, cu diferite grade de severitate.
Problema cu care un atacator poate executa JavaScript în sesiunile altor utilizatori este că atunci este posibil ca atacatorul să facă orice site-ului web pe care îl văd victimele. Aceasta include redirecționarea victimelor către site-uri web externe, furtul de jetoane de autentificare și monitorizarea detaliilor de plată.
Cea mai gravă formă de vulnerabilitate XSS este „Stored” sau „Persistent” Cross-Site Scripting, aici este posibil ca un atacator să creeze o sarcină utilă XSS și apoi să o trimită, astfel încât să fie salvată în baza de date. Cu un exploit XSS salvat în baza de date, este posibil ca acesta să afecteze alți utilizatori pe o perioadă largă de timp.
O altă formă de Cross-Site Scripting este „Reflectată”, acest tip nu este salvat în niciun moment, în schimb, sarcina utilă este inclusă în browser. De obicei, acest tip de XSS face parte din atacurile de tip phishing, în care un atacator încearcă să păcălească o victimă să facă clic pe un link rău intenționat.
În general, majoritatea atacurilor XSS au sarcina utilă trimisă la server la un moment dat, dar unele atacuri sunt pur partea clientului, nefiind niciodată trimisă la server și în schimb afectând doar partea clientului JavaScript. Acesta se numește XSS bazat pe DOM, deoarece rămâne în Modelul obiect de document JavaScript sau DOM. Acest tip de vulnerabilitate este deosebit de greu de identificat și rezolvat, deoarece exploit-urile nu sunt niciodată văzute de server și, prin urmare, nu pot fi înregistrate.
Din punct de vedere istoric, tehnica de prevenire a vulnerabilităților XSS este de a filtra toate datele trimise de utilizator, folosind liste de blocare pentru a respinge orice mesaj cu caractere sau cuvinte semnificative în JavaScript. Acest lucru a avut tendința de a duce la o cursă a înarmărilor de a găsi ocoliri pentru filtru, prevenind, de asemenea, unele trimiteri legitime de utilizatori. Soluția corectă este utilizarea entităților HTML pentru a codifica datele trimise de utilizator. cu modulele de entități HTML activate, caracterele sunt codificate automat într-un format în care browserul știe să le afișeze ca simboluri corecte, dar nu să le trateze ca cod.