A php átal nyújtott session kezelés nagyon egyszerű és rengetegen használják, és biztonságosnak vélik, pedig távolról sem az alapesetben.

Nézzünk egy egyszerű példát.

session_start();

if (auth($_POST["user"],$_POST["pass"]))
{
$_SESSION["logged"] = true;
}

Ez egy egyszerű beléptető szkript, rengetegen használják ezt a módszert azonban nem teljesen biztonságos, hiszen létezik XSS amivel könnyedén megszerezhetjük a session váltózót.Még a legnagyobbakkal is megesik hogy XSS található a weboldalon, lást Twitter, Facebook stb, és továbbá fontos azt is megjegyezni, hogy az XSS nem csak a Cookieről szól!.

Ha található egy XSS rés az oldalon, ami nagyon valószínű, akkor a támadó el tudja lopni a session változót (általában PHPSESSID re halgat ) és azt felhasználva be tud lépni.

Példa : http://duppy.info/stuff/php-session/cook1.php

Forráskód : http://duppy.info/stuff/php-session/cook1.php.txt

Mint a fenti példa mutatja, bárki aki megszerzi  a session azonosítót vissza élhet vele nagyon könnyedén.

Megoldás:

Általános megoldás nincsen, mindenki kialakíthat egyet ami a célnak megfelel.

1. HttpOnly kevesen használják viszont nagyon hatásos így a cookie-t nem lehet elérni a hagyományos módon (document.cookie) de ez nem oldja meg teljesen az XSS problémát mert XSS nem csak a cookieről szól, de a mostani esetben egy plusz réteget biztosít és mindössze egyetlen sor az egész:

ini_set(“session.cookie_httponly”, 1)

2.  Az ip cím ellenőrzés nem a legjobb megoldás de használhatjuk ezt is, azonban a User Agent jobb megoldásnak tűnik, de lehet a kettőt kombinálni is.

Először töröljük a régi PHPSESSID-t itt :   http://duppy.info/stuff/php-session/del.php

És itt található egy példa : http://duppy.info/stuff/php-session/cook2.php

Forráskód : http://duppy.info/stuff/php-session/cook2.php.txt

Mivel nem ugyanaz az IP és (esetleg) a UserAgent ezért nem működik  a Session lopás, lehet csak UserAgent re alapozni így egyetlen dobása van a támadónak, ha nem találja el 1 próbálkozásból a UserAgentet akkor a Sessiont töröljük és a valódi usernek újra be kell lépnie.