Mi az a Cross-site Scripting?

A webhelyek egyik leggyakoribb sebezhetőségi osztálya a „Cross-Site Scripting” vagy „XSS”. Az XSS sebezhetősége az, ahol a felhasználó JavaScript futtatását idézheti elő. Az XSS sebezhetőségének számos változata létezik, eltérő súlyossággal.

A probléma azzal, hogy egy támadó képes JavaScriptet futtatni más felhasználók munkameneteiben, hogy a támadó bármit megtehet az áldozatok által látott webhelyen. Ez magában foglalja az áldozatok átirányítását külső webhelyekre, a hitelesítési tokenek ellopását és a fizetési adatok figyelését.

Az XSS sebezhetőség legsúlyosabb formája a „tárolt” vagy „perzisztens” webhelyek közötti szkriptelés, ez az a hely, ahol A támadó létrehozhat egy XSS hasznos adatot, majd elküldheti azt, így az elmentésre kerül az adatbázisban. Az adatbázisban elmentett XSS exploittal lehetséges, hogy az hosszú időn keresztül más felhasználókra is hatással legyen.

A Cross-Site Scripting másik formája a „Reflected”, ezt a típust a rendszer nem menti sehol, ehelyett a hasznos terhelést a böngésző tartalmazza. Ez a fajta XSS általában az adathalász támadások része, amikor a támadó megpróbálja rávenni az áldozatot, hogy rákattintson egy rosszindulatú hivatkozásra.

Általánosságban elmondható, hogy a legtöbb XSS-támadás egy bizonyos ponton elküldi a hasznos terhelést a szervernek, de néhány támadás igen tisztán kliensoldali, soha nem küldik el a szervernek, hanem csak az ügyféloldalt érinti JavaScript. Ezt DOM-alapú XSS-nek hívják, mivel a JavaScript-dokumentumobjektum-modellben vagy DOM-ban marad. Az ilyen típusú sebezhetőséget különösen nehéz azonosítani és feloldani, mivel a kihasználásokat a szerver soha nem látja, így nem naplózhatók.

Az XSS-sebezhetőségek elleni védekezési technika korábban az volt, hogy kiszűri az összes felhasználó által beküldött adatot, tiltólistákat használva a JavaScriptben értelmes karaktereket vagy szavakat tartalmazó üzenetek elutasítására. Ez általában fegyverkezési versenyhez vezetett a szűrő megkerülőinek megtalálásában, miközben megakadályozott néhány jogos felhasználói beadványt. A helyes megoldás a HTML entitások használata a felhasználók által benyújtott adatok kódolására. Engedélyezett HTML entitásmodulok esetén a karakterek automatikusan olyan formátumba vannak kódolva, ahol a böngésző tudja, hogy helyes szimbólumként jeleníti meg őket, de nem kódként kezeli őket.