ugrás a tartalomhoz

Codeigniter felhasználó kezelés.

naburus · 2012. Dec. 20. (Cs), 21.37
Hello

Nemrégiben álltam neki fejleszteni Codeigniter -ben, minden nagyon tetszik, de van valami ami nem tudok megoldani hatékonyan. Illetve kissé bizonytalan vagyok.

A login rendszert szeretném biztonságos módon megvalósítani.

Több példát is láttam, a dolog röviden úgy néz ki, van egy form beírom az adatokat, egy controller egy model segítségével validálja, ha oké redirecteli egy admin felületre pl.

Oké na most több gond is adódik, egyrészt az admin felületen több példában nincs vizsgálat, hogy valóban jogosult rá a felhasználó, hogy megtekintheti e az admin felület. Ha van akkor is session kezeléssel van megoldva. Például itt: link

Cookiek -ben tárolom a role -ját a felhasználónak, pl admin vagy user, majd minden admin felület megtekintésekor megnézem, hogy admin e az illető.

Ezzel az a baj, hogy a cookiet lehet hamisítani, bár nem értem pontosan hogy működik a CI session kezelése, de ez nem tűnik számomra túl biztonságosnak. Megnéztem, igaz, hogy titkosítja a CI a session őket (cookie), de elég biztonságos módszer ez? Mennyire nehéz hamisítani?

Pl így nézem meg admin e az illető:

if ($this->session->userdata('role') == 'admin')

Érdekelne minden vélemény.
 
1

Nem vagyok codeigniter-es, de

Kubi · 2012. Dec. 21. (P), 14.04
Nem vagyok codeigniter-es, de szerintem a session benne épp annyira biztonságos mint mindehol máshol.

A session-t el lehet lopni, ez tény (a küldött cooki-t kell lemásolni), de erre van több megoldás, amivel csökkentheted ezt a veszélyt.

"php cross site scripting prevention" erre keress rá googliban.

Szokás még ezen kívül pl. formokban csrf token-t használni, "php form csrf token" googli. Ha form-ot küldesz a szervernek, mindig POST-ot használj.

Ha törölni akarsz pl. egy elemet a db-ből ne úgy old meg hogy elég beírni egy címet pl valami.hu/delete/12, mert ekkor elég ha egy képet csempésznek az oldaladra, vagy egy másik weboldalra amit te meg szoksz nyitni nap mint nap, és azon keresztül törlik a rekordot (kép url-je sima get hívást csinál, meg hívja az adott url-t és hopsz törölve a rekord a db-ből.). Ilyenkor is post-ot használj, csinálj neki egy form-ot. Lehet alapelv, bármilyen módosítást hajtasz végre a db-ben amit a user kezdeményezett, akkor az oldal hívásod post legyen.

Kicsit biztonságosabbá teheted az oldalt, ha minden oldal betöltéskor a "$_SERVER['HTTP_USER_AGENT']" -et figyeled, hogy meg egyezik e a session-ben tárolttal. Így ebben az esetben nem csak a cooki-t kell lemásolnia, hanem a böngésző user-agent-jét is.

A "if ($this->session->userdata('role') == 'admin')" a session-ben tárolja a beállított értéket, böngészőben, cookie-ból nem lesz kiolvasható (szerver oldali).

Így röviden ennyi, lehet kimaradt valami, akkor egészítsetek ki :)
2

.

naburus · 2012. Dec. 21. (P), 15.16
Értem kösz a hozászolásod nagyon hasznos volt, rákeresek erre a "php cross site scripting prevention" -ra. :)