Što je skriptiranje na više mjesta?

Jedna od najčešćih klasa ranjivosti na web-stranicama naziva se "Cross-Site Scripting" ili "XSS". XSS ranjivosti su mjesta gdje je moguće da korisnik izazove izvršavanje JavaScripta. Postoji niz različitih varijanti XSS ranjivosti, s različitim stupnjevima ozbiljnosti.

Problem s napadačem koji može izvršiti JavaScript u sesijama drugih korisnika je taj što je tada moguće da napadač učini bilo što na web stranici koju žrtve vide. To uključuje preusmjeravanje žrtava na vanjske web stranice, krađu tokena za provjeru autentičnosti i praćenje pojedinosti o plaćanju.

Najteži oblik XSS ranjivosti je "pohranjeno" ili "postojano" skriptiranje na više web stranica, ovdje moguće je da napadač izradi XSS korisni teret i zatim ga pošalje, tako da se sprema u bazu podataka. Uz XSS eksploataciju spremljenu u bazu podataka, tada je moguće da utječe na druge korisnike tijekom dugog vremenskog razdoblja.

Drugi oblik skriptiranja na više web-mjesta je "Reflected", ova vrsta se ni u jednom trenutku ne sprema, umjesto toga, korisni teret je uključen u preglednik. Obično je ova vrsta XSS-a dio phishing napada, gdje napadač pokušava prevariti žrtvu da klikne zlonamjernu vezu.

Općenito, većina XSS napada ima korisni teret u nekom trenutku poslan na poslužitelj, ali neki napadi jesu isključivo na strani klijenta, nikada se ne šalju na poslužitelj i umjesto toga utječu samo na klijentsku stranu JavaScript. To se naziva XSS zasnovan na DOM-u jer ostaje u objektnom modelu JavaScript dokumenta ili DOM-u. Ovu vrstu ranjivosti posebno je teško identificirati i riješiti jer poslužitelj nikad ne vidi eksploataciju i stoga se ne može prijaviti.

Povijesno gledano, tehnika prevencije protiv XSS ranjivosti je filtriranje svih podataka koje su poslali korisnici, korištenjem blok-lista za odbijanje poruka sa smislenim znakovima ili riječima u JavaScriptu. To je dovelo do utrke u naoružanju u pronalaženju zaobilaznica za filtar, a također je spriječilo neke legitimne korisničke podneske. Ispravno rješenje je korištenje HTML entiteta za kodiranje podataka koje je podnio korisnik. s omogućenim modulima HTML entiteta, znakovi se automatski kodiraju u format u kojem preglednik zna da ih prikazuje kao ispravne simbole, ali ne i da ih tretira kao kod.