Cross-Site Scripting, cunoscut sub numele de XSS, este una dintre cele mai periculoase metode de atac folosite de criminali cibernetici, așa că este vital ca fiecare dezvoltator și cercetător în securitate să știe ce este și cum să facă preveni atacurile. Deci, cum puteți lua măsuri împotriva vulnerabilității XSS? Utilizați HTML, JavaScript sau DOM pentru a afișa datele pe care un site le primește de la utilizator. Una sau mai multe dintre aceste trei zone diferite pot lucra împreună.
Cum să preveniți XSS folosind HTML
XSS permite atacatorilor să injecteze coduri rău intenționate sau scripturi în pagini web, vizând utilizatorii nebănuiți care vizitează site-ul. Acest lucru ar putea fura date cu caracter personal, poate redirecționa vizitatorii către un alt site creat de criminalul cibernetic sau poate modifica în alt mod aspectul paginii web. Dar poți împiedica acest lucru să se întâmple; de exemplu, oprindu-i să insereze HTML.
Imaginați-vă că aveți un site web cu o carte de oaspeți. Să presupunem că vizitatorii dvs. care folosesc această carte de oaspeți își pot scrie numele și mesajele aici, iar mesajele lor pot fi vizualizate public. Un atacator care dorește să facă un test XSS în cartea de oaspeți va folosi zona pe care ați alocat-o pentru a fi scris un mesaj. Acel cibercriminal va rula un cod JavaScript aici. De exemplu, un atacator ar putea folosi cod JavaScript precum:
<scenariu>alerta("XSS!")</script>
Atacatorul trebuie să folosească o etichetă de script pentru ca acest lucru să aibă succes. Dacă nu, codul JavaScript nu va funcționa. Trebuie să codificați instrucțiunea
Cum să preveniți XSS folosind JavaScript
Logica în HTML este de asemenea valabil în JavaScript. În unele aplicații, este posibilă imprimarea datelor primite de site-ul web de la utilizator cu un cod JavaScript.
Luați în considerare această codificare:
<p id="imprimare"></p>
<scenariu>
document.getElementById("Test").innerHTML = "";
</script>
Imaginați-vă că un site web folosește un bloc de cod ca cel de mai sus. Dezvoltatorul a folosit aici o etichetă „p” numită „print”. După cum puteți vedea din cod, o valoare va veni din parametrul „căutare”, iar dezvoltatorul dorește să afișeze această valoare primită în eticheta „p”. Dezvoltatorul care a făcut această operațiune a vrut să folosească caracteristica innerHTML a JavaScript.
Acum să privim situația din punctul de vedere al atacatorului cibernetic. Într-un astfel de caz, atacatorul va efectua un test XSS în cadrul etichetei „script”. Pentru aceasta, atacatorul nu trebuie să repornească eticheta, deoarece o etichetă „script” care este deja folosită. Atacatorul ar putea apoi să scrie un test ca acesta:
filename.php? căutare=a" alerta("XSS!"); f= "
Acest cod va apărea pe site ca:
document.getElementById("Test").innerHTML = " A" alerta("XSS!"); f="";
Atacul ar avea succes. Pentru a înțelege mai bine problema, să examinăm încă un exemplu de tehnică pe care un atacator ar putea folosi. Este posibil ca hackerul să fi aplicat un test XSS, cum ar fi:
filename.php? cauta=";</script><ei>Fatih</em>
Iată cum ar arăta când este vizualizat de pe site:
document.getElementById("Test").innerHTML = "";</script><ei>Fatih</em>";
Acest lucru poate părea puțin ciudat, deoarece atacatorul a închis prima etichetă „script” folosind o structură precum „/script” aici. Și astfel, atacatorul poate reporni orice cod JavaScript și HTML dorește.
Dacă vă gândiți la aceste două exemple diferite, protejarea împotriva XSS pare destul de simplă. Precauția necesară ar fi codificarea " și ' personajele pe care le vedeți în primul exemplu. În al doilea exemplu, codificați caracterele < și >.
Cum să preveniți XSS folosind DOM
În această variantă de XSS, datele pe care site-ul le primește de la utilizator pot interfera cu proprietatea unui element DOM. De exemplu, informațiile de culoare pe care site-ul le primește de la utilizator pot afecta culoarea de fundal a unui tabel sau întregul fundal al paginii. Deci, utilizatorul interferează fără să vrea cu aspectul stil al corpului și al mesei. Următorul cod este un exemplu bun pentru aceasta:
<body bgcolor="<?php echo $_GET['culoare']; ?>"/>
Cu aceasta, site-ul web folosește parametrul „color” primit de la utilizator direct în proprietatea „bgcolor” a elementului „body”. Deci, ce ar putea face un atacator în acest moment? Ei ar putea executa acest cod rău intenționat:
filename.php? culoare=roșu" onload="alerta('XSS!')
Acesta arată astfel când este vizualizat de pe site:
<body bgcolor=" roșu" onload="alerta('XSS!') "/>
Pentru a preveni acest lucru, dezvoltatorul ar trebui să codifice " caracter.
Cu toate acestea, mai trebuie remarcat un element important în JavaScript. Următorul fragment de cod este un exemplu pentru aceasta:
<a href="javascript: alert('XSS!')">
Aceasta înseamnă că este posibil să rulați un cod JavaScript direct. Una dintre cele mai bune măsuri preventive este să vă asigurați că site-ul web verifică dacă datele pe care le primește de la utilizatori sunt o adresă URL reală. Cea mai simplă metodă este să vă asigurați că există expresii precum „HTTP” și „HTTPS” (versiunea securizată a HTTP) în legătură.
Un exemplu de funcție pentru a preveni XSS cu PHP
Ați văzut câteva exemple despre cum să protejați o aplicație sau un site web de atacurile XSS. Puteți utiliza fragmentele de cod din acest tabel cu PHP:
Codați în HTML |
htmlspecialchars($str, ENT_COMPAT) |
Codați în JavaScript și atributul DOM |
htmlspecialchars($str, ENT_NOQUOTES) |
Verificare URL |
„/^(((https?)|(\/\/))).*/”; |
Rețineți că acestea sunt doar exemple și vor varia în funcție de limba software-ului pe care o utilizați.
Puteți creați o aplicație web cu PHP și încercați codurile pe care le vedeți mai sus pentru a le trimite mesaj. Dacă vă întrebați cum să utilizați toate aceste metode, puteți obține câteva idei din blocul de cod PHP de mai jos, care ar trebui să fie util chiar dacă utilizați o altă limbă:
<?php
$date = $_GET['date'];funcţieîn_atribut($str){
întoarcere htmlspecialchars($str, ENT_COMPAT);
// ENT_COMPAT va codifica caracterul ghilimele duble ("").
}
funcţiein_html($str){
$link = '/^(((https?)|(\/\/))).*/';
dacă(!preg_match($link, $str))
{
întoarcere "/";
}
întoarcere $str;
}
$date = in_attribute($date);
$date = in_html($date);
$date = real_url (date);
?>
Protejați-vă site-ul web de XSS și altele
XSS este un vector de atac popular folosit de hackeri. De obicei, o valoare de cale în adresa URL, orice câmp de pe site-ul dvs. în care pot fi introduse date (cum ar fi formularele și câmpurile de comentarii), poate fi folosită pentru a testa o vulnerabilitate XSS. Dar, desigur, există multe metode diferite pe care infractorii cibernetici le pot folosi pentru a ataca un site, mai ales dacă aveți un site web care are mulți utilizatori și le ascunde informațiile.