Sveiks!
Neko briesmīgi sliktu neredzu. Izņemot - nav skaidrs, vai lietotāja padotie dati tiek pienācīgi izfiltrēti padodot tos šim:
//$sql SELECT * FROM lietottaji WHERE email = ... AND password = ... mysql_fetch_assoc ...
Un tomēr nenāktu par ļaunu papildus arī pārliecināties, ka sesijā saglabātais mainīgais ir vesels skaitlis:
$saved_session_id = intval($_SESSION['lietotajs']);
It kā jau nevajadzētu sesijas mainīgajā būt kaut kam sliktam, bet tomēr drošs paliek drošs.
Par sesiju drošību kā tādu nesen piedalījos runāšanā sitepoint forumā.
Faktiski īsumā - šobrīd cilvēki, kam var droši ticēt, ka viņu piedāvātais (Hardened Stateless Session Cookies) ir pārdomāts, piedāvā:
Glabāt Datubāzē H(sāls | parole) Ntās iterācijas hashu v=H(aN) = H(H(aN-1 | parole)) un a0 = H(sāls | parole) un sāli (kam jābūt lielam -> ~256b).
Kad lietotājs iesūta lietotājvārdu un paroli, veikt autentifikācijas pārbaudi šādi:
Atrast sāli, kas atbilst konkrētajam lietotājam
Izmantojot sāli un iesūtīto paroli uzģenerē H(aN') un pārbauda vai tas sakrīt ar tabulā glabājamo
Ja sakrīt, tad lietotājam kukijā uzstāda šādus mainīgos: exp - datumlaiks, kad sesijas derīgums beidzas. Tas nozīmē, ka ir stingrs sesijas beigu laiks, kurš netiek pagarināts.
data - web-aplikācijas stāvokļi, kas ir jāuztur (piemēram lietotāja id)
auth - autentifikators, kas vienāds ar aN
digest - HMACk(exp||data||auth) daidžests ar serverim zināmu atslēgu k, kas nodrošina, ka lietotājs nevar manipulēt datus, jo manipulētie dati nedos šādu daidžestu.
[*] katru reizi tiek pārbaudīts, vai iesūtītais auth ir derīgais. Un vai dati atbilst daidžestam.
Vēl neesmu līdz galam uzrakstījis implementāciju.