Domov arrow 6. VARNOST arrow 6.5 Varnost seje


6.5 Varnost seje Natisni E-pošta
Dve pogosti obliki napadov na seje sta utrditev seje (ang. session fixation) in ugrabitev seje (ang. session hijacking). Medtem ko večino drugih napadov lahko preprečimo s presejanjem vnosa in ubežanjem izhoda, se napadov na seje s tem ne more preprečiti. Namesto tega jih je potrebno predvidevati in identificirati potencialna težavna mesta aplikacije.
Ko uporabnik prvič pride na stran, ki kliče session_start(), se za uporabnika ustvari seja. PHP ustvari naključni označevalec seje za istovetenje uporabnika in nato pošlje Set-Cookie glavo odjemalcu. Privzeto je ime piškotka PHPSESSID, toda možno je zamenjati ime piškotka v php.ini-ju ali z uporabo funkcije session_name(). Ob naslednjih obiskih, odjemalec istoveti uporabnika s piškotkom in s tem aplikacija ohranja stanje.
Obstaja pa tudi možnost postavljanja označevalca seje ročno skozi poizvedbeni niz in s tem se prisili uporaba določene seje. Ta enostaven napad se imenuje utrditev seje. Najbolj pogosto je to doseženo z ustvarjanjem povezave do tvoje aplikacije in pripenjanjem sejinega označevalca, ki ga napadalec želi dati kateremukoli uporabniku, ki klikne na povezavo:

<a href="http://primer.si/index.php?PHPSESSID=1234">Klikni tukaj</a>

Ko uporabnik dostopa do tvoje strani skozi to sejo, se lahko od njega zahteva, da se prijavi in zagotovi občutljive informacije. V primeru, da se uporabnik prijavi medtem ko uporablja ta označevalec seje, napadalec lahko "jezdi" na isti seji in pridobi dostop do uporabnikovega računa. Zato se utrditev seje včasih imenuje jahanje seje. Ker je namen tega napada pridobitev višje stopnje pravic, so točke, kjer naj bi bil napad ustavljen, jasne: vedno ko se uporabnikove dostopne pravice spremenijo, je potrebno ponovno ustvariti označevalec seje. S PHP-jem je to narejeno s session_regenetate_id():

session_start();
// Če je prijava uspešna, ponovno ustvari ID seje
if(istovetenje())
{
session_regenerate_id();
}

Drugi tip napada je ugrabitev seje. Ugrabitev seje je splošen termin uporabljen za opis kateregakoli načina, s katerim napadalec pridobi veljaven sejin označevalec uporabnika. Ko se uporabnik prijavi in je sejin označevalec ponovno ustvarjen, ima nov ID seje. Če napadalec odkrije ta nov ID, ga lahko uporabi za pridobitev dostopa skozi uporabnikovo sejo. Zato je potrebno uporabiti še druge načine istovetenja uporabnika. Drug način istovetenja uporabnika poleg označevalca seje je preverjanje različnih glav poslanih s strani odjemalca. Glava, ki je posebno uporabna in se ne spreminja med zahtevami je glava User-Agent. Ker bi bilo nenavadno, da bi uporabnik zamenjal brskalnik med uporabo iste seje, se lahko ta glava uporabi za istovetenje potencialne ugrabitve.
Po uspešnem prijavnem postopku, shraniš User-Agent-a v sejo:

$_SESSION[’up_agent’] = $_SERVER[’http_USER_AGENT'];

Ko se naloži naslednja stran, preveriš, če se je spremenil User-Agent. Če se je, prisiliš uporabnika v ponovno prijavo.

if ($_SESSION[’up_agent’] != $_SERVER[’http_USER_AGENT'])
{
    // prisili uporabnika v ponovno prijavo
    exit;
}
 


© 2007-2008 PHP, MySQL, XML, OOP, varnost