Cum să preveniți XSS Web Security Academy
În această secțiune, vom descrie câteva principii generale pentru prevenirea vulnerabilităților de scriptare între site-uri și modalități de utilizare a diferitelor tehnologii comune pentru protejarea împotriva atacurilor XSS.

Prevenirea scripturilor între site-uri poate fi realizată în general prin două straturi de apărare:
Puteți utiliza Burp Scanner pentru a vă scana site-urile web pentru a găsi numeroase vulnerabilități de securitate, inclusiv XSS. Logica de scanare de ultimă oră a lui Burp reproduce acțiunile unui atacator calificat și este capabilă să obțină o acoperire corespunzătoare ridicată a vulnerabilităților XSS. Puteți utiliza Burp Scanner pentru a vă asigura că apărarea împotriva atacurilor XSS funcționează eficient.
Codificați datele la ieșire
Codificarea ar trebui aplicată direct înainte ca datele controlabile de utilizator să fie scrise într-o pagină, deoarece contextul în care scrieți determină ce fel de codificare trebuie să utilizați. De exemplu, valorile dintr-un șir JavaScript necesită un tip diferit de evadare a celor dintr-un context HTML.
În context HTML, ar trebui să convertiți valorile care nu figurează pe lista albă în entități HTML:
- convertește în:
- > convertește în:>
Într-un context de șir JavaScript, valorile non-alfanumerice ar trebui să fie evadate Unicode:
- convertește în: \ u003c
- > convertește în: \ u003e
Uneori va trebui să aplicați mai multe straturi de codificare, în ordinea corectă. De exemplu, pentru a încorpora în siguranță intrările utilizatorului într-un handler de evenimente, trebuie să vă ocupați atât de contextul JavaScript, cât și de contextul HTML. Deci, trebuie mai întâi să scape de Unicode de intrare și apoi să-l codezi HTML:
Validați datele introduse la sosire
Codificarea este probabil cea mai importantă linie de apărare XSS, dar nu este suficientă pentru a preveni vulnerabilitățile XSS în fiecare context. De asemenea, ar trebui să validați intrarea cât mai strict posibil în momentul în care este primită de la un utilizator.
Exemple de validare a intrărilor includ:
- Dacă un utilizator trimite o adresă URL care va fi returnată în răspunsuri, confirmând că începe cu un protocol sigur, cum ar fi HTTP și HTTPS. În caz contrar, cineva ar putea exploata site-ul dvs. cu un protocol dăunător, cum ar fi javascript sau date .
- Dacă un utilizator furnizează o valoare care este de așteptat să fie numerică, validând că valoarea conține de fapt un număr întreg.
- Validarea acelei intrări conține doar un set de caractere așteptat.
Validarea intrărilor ar trebui să funcționeze în mod ideal blocând intrarea nevalidă. O abordare alternativă, a încercării de a curăța intrările nevalide pentru ao face valabilă, este mai predispusă la erori și ar trebui evitată ori de câte ori este posibil.
Listă albă vs listă neagră
Validarea intrărilor ar trebui să utilizeze, în general, liste albe mai degrabă decât liste negre. De exemplu, în loc să încercați să faceți o listă cu toate protocoalele dăunătoare (javascript, date etc.), pur și simplu faceți o listă de protocoale sigure (HTTP, HTTPS) și interziceți orice nu este pe listă. Acest lucru vă va asigura că apărarea dvs. nu se va sparge atunci când apar noi protocoale dăunătoare și o va face mai puțin susceptibilă la atacuri care încearcă să ofere valori nevalide pentru a se sustrage unei liste negre.
Permite HTML „sigur”
Permiterea utilizatorilor să posteze marcaje HTML ar trebui evitată ori de câte ori este posibil, dar uneori este o cerință de afaceri. De exemplu, un site de blog ar putea permite să fie postate comentarii care conțin unele limitări HTML.
Abordarea clasică este de a încerca să filtrați etichetele potențial dăunătoare și JavaScript. Puteți încerca să implementați acest lucru folosind o listă albă de etichete și atribute sigure, dar datorită discrepanțelor în motoarele de analiză a browserului și a ciudățenilor precum mutația XSS, această abordare este extrem de dificilă de implementat în siguranță.
Cea mai puțin proastă opțiune este utilizarea unei biblioteci JavaScript care efectuează filtrarea și codificarea în browserul utilizatorului, cum ar fi DOMPurify. Alte biblioteci permit utilizatorilor să furnizeze conținut în format de reducere și să convertească reducerea în HTML. Din păcate, toate aceste biblioteci au din când în când vulnerabilități XSS, deci aceasta nu este o soluție perfectă. Dacă utilizați una, ar trebui să monitorizați cu atenție actualizările de securitate.