Cross-Site Scripting, nadaleko poznat kao XSS, jedna je od najopasnijih metoda napada koje koriste kibernetičkih kriminalaca, stoga je ključno da svaki programer i istraživač sigurnosti zna što je to i kako spriječiti napade. Dakle, kako možete nešto poduzeti protiv XSS ranjivosti? Koristite HTML, JavaScript ili DOM za prikaz podataka koje web-mjesto prima od korisnika. Jedno ili više od ova tri različita područja mogu raditi zajedno.
Kako spriječiti XSS pomoću HTML-a
XSS omogućuje napadačima ubacivanje zlonamjernih kodova ili skripte u web stranice, ciljajući na korisnike koji ništa ne sumnjaju posjećuju stranicu. To bi moglo ukrasti osobne podatke, preusmjeriti posjetitelje na drugu stranicu koju je postavio kibernetički kriminalac ili na neki drugi način utjecati na izgled web stranice. Ali možete spriječiti da se to dogodi; na primjer, zaustavljanjem umetanja HTML-a.
Zamislite da imate web stranicu s knjigom gostiju. Recimo da vaši posjetitelji koji koriste ovu knjigu gostiju mogu ovdje napisati svoja imena i poruke, a njihove poruke mogu biti javno pregledane. Napadač koji želi napraviti XSS test u vašoj knjizi gostiju koristit će područje koje ste dodijelili za pisanje poruke. Taj cyber kriminalac će ovdje pokrenuti JavaScript kod. Na primjer, napadač bi mogao koristiti JavaScript kôd kao što je:
<skripta>upozorenje("XSS!")</script>
Napadač mora koristiti oznaku skripte da bi ovo bilo uspješno. Ako to ne rade, JavaScript kôd neće raditi. Morate kodirati naredbu < tako da korisnici nikad ne mogu koristiti HTML oznake. To će napadaču otežati rad s HTML oznakama.
Kako spriječiti XSS pomoću JavaScripta
Logika u HTML-u je također vrijedi u JavaScriptu. U nekim je aplikacijama moguće ispisati podatke koje web stranica primi od korisnika s JavaScript kodom.
Razmotrite ovo kodiranje:
<p id="ispisati"></str>
<skripta>
document.getElementById("test").unutarnjiHTML = "";
</script>
Zamislite da web stranica koristi blok koda poput onog iznad. Programer je ovdje upotrijebio oznaku "p" pod nazivom "print". Kao što možete vidjeti iz koda, vrijednost će doći iz parametra "search", a programer želi prikazati ovu dolaznu vrijednost u oznaci "p". Programer koji je izvršio ovu operaciju želio je koristiti innerHTML značajku JavaScripta.
Pogledajmo sada situaciju sa stajališta kibernetičkog napadača. U tom slučaju, napadač će izvršiti XSS test unutar oznake "script". Za ovo, napadač ne treba ponovno pokrenuti oznaku, jer je "script" oznaka koja se već koristi. Napadač bi tada mogao napisati test poput ovog:
naziv datoteke.php? pretraživanje=a" upozorenje("XSS!"); f= "
Ovaj će se kôd pojaviti na web stranici kao:
document.getElementById("test").unutarnjiHTML = " a" upozorenje("XSS!"); f="";
Taj bi napad bio uspješan. Kako bismo bolje razumjeli problem, proučimo još jedan primjer tehnike koju napadač može koristiti. Haker je možda primijenio XSS test kao što je:
naziv datoteke.php? traži=";</script><em>Fatih</em>
Ovako bi to izgledalo gledano s web stranice:
document.getElementById("test").unutarnjiHTML = "";</script><em>Fatih</em>";
Ovo se može činiti pomalo čudnim jer je napadač zatvorio prvu oznaku "skripte" korištenjem strukture poput "/skripte" ovdje. I tako, napadač može ponovno pokrenuti bilo koji JavaScript i HTML kod koji želi.
Ako razmislite o ova dva različita primjera, zaštita od XSS-a čini se prilično jednostavnom. Nužna mjera opreza bila bi kodiranje " i ' znakova koje vidite u prvom primjeru. U drugom primjeru kodirajte znakove < i >.
Kako spriječiti XSS koristeći DOM
U ovoj varijanti XSS-a, podaci koje web stranica prima od korisnika mogu ometati svojstvo DOM elementa. Na primjer, informacije o boji koje web mjesto dobiva od korisnika mogu utjecati na boju pozadine tablice ili cijele pozadine stranice. Dakle, korisnik se nesvjesno miješa u stilske rasporede tijela i stola. Sljedeći kod je dobar primjer za ovo:
<tijelo bgcolor="<?php echo $_GET['boja']; ?>"/>
Time web stranica koristi parametar "color" primljen od korisnika izravno u svojstvu "bgcolor" elementa "body". Dakle, što bi napadač mogao učiniti u ovom trenutku? Mogli bi izvršiti ovaj zlonamjerni kod:
naziv datoteke.php? boja=crvena" onload="upozorenje('XSS!')
Ovako izgleda kada se gleda s web stranice:
<tijelo bgcolor=" Crvena" onload="upozorenje('XSS!') "/>
Kako bi spriječio da se to dogodi, programer bi morao kodirati " lik.
Međutim, postoji još jedan važan element u JavaScriptu koji treba primijetiti. Sljedeći isječak koda je primjer za to:
<a href="javascript: upozorenje('XSS!')">
To znači da je moguće izravno pokrenuti neki JavaScript kôd. Jedna od najboljih preventivnih mjera je osigurati da web mjesto provjerava jesu li podaci koje prima od korisnika pravi URL. Najjednostavnija metoda je provjeriti postoje li izrazi kao što su "HTTP" i "HTTPS" (sigurna verzija HTTP-a) u vezi.
Primjer funkcije za sprječavanje XSS-a s PHP-om
Vidjeli ste neke primjere kako zaštititi aplikaciju ili web mjesto od XSS napada. Možete koristiti isječke koda u ovoj tablici s PHP-om:
Kodirajte u HTML |
htmlposebni znakovi($str, ENT_COMPAT) |
Kodirajte u JavaScript i DOM atribut |
htmlposebni znakovi($str, ENT_NOQUOTES) |
Provjera URL-a |
'/^(((https?)|(\/\/))).*/'; |
Imajte na umu da su ovo samo primjeri i da će se razlikovati ovisno o jeziku softvera koji koristite.
Možeš izraditi web aplikaciju s PHP-om i isprobajte kodove koje vidite gore da biste ih poslali SMS-om. Ako se pitate kako koristiti sve ove metode, možete dobiti neke ideje iz bloka PHP koda u nastavku, što bi trebalo biti korisno čak i ako koristite drugi jezik:
<?php
$podaci = $_GET['podaci'];funkcijain_atribut($str){
povratak htmlposebni znakovi($str, ENT_COMPAT);
// ENT_COMPAT će kodirati znak dvostrukih navodnika (").
}
funkcijau_html($str){
$link = '/^(((https?)|(\/\/))).*/';
ako(!preg_match($link, $str))
{
povratak "/";
}
povratak $str;
}
$podaci = in_atribut($podaci);
$podaci = in_html($podaci);
$podaci = pravi_url (podaci);
?>
Zaštitite svoju web stranicu od XSS-a i više
XSS je popularan vektor napada koji koriste hakeri. Obično se vrijednost puta u URL-u, bilo kojem polju na vašoj web stranici u koje se mogu unijeti podaci (kao što su obrasci i polja za komentare), može koristiti za testiranje XSS ranjivosti. Ali naravno, postoji mnogo različitih metoda koje kibernetički kriminalci mogu upotrijebiti za napad na web mjesto, posebno ako imate web mjesto koje ima mnogo korisnika i skriva njihove podatke.