Admin oldal és normál felület session elválasztása
Üdv Mindenkinek,
olyan kérdésem lenne, hogy van egy Backend rész egy weboldalhoz, amihez be kell jelentkezni. Minden böngészőpéldány indításakor elméletileg új session fog indulni, ha php-t használunk egy adott weboldal frontendjében és backendjében is.
Kicsit máshogy, ez azt jelenti, hogy indítok két böngészőt egyikben a frontendet (vagy mást) nézek a másikban a backendet használom. Amennyiben a backend részbe bejelentkeztem, elvégzek néhány műveletet, amit kell és bezárom az ablakot, ugyan van kijelentkezés modul, de nem feltétlen fogja a felhasználó úgy kezelni a böngészőt és a backendet.
Miután bezártam az ablakot, átmegyek a másik böngészőablakra - ahol a frontend vagy bármilyen oldal van - és beírom egy admin oldal elérési útját és violá máris bennt vagyok a backend részben! Ez egy elég rizikós biztonsági rés. A kérdésem ezt hogyan lehet elkerülni?
Üdv
Sanyi
■ olyan kérdésem lenne, hogy van egy Backend rész egy weboldalhoz, amihez be kell jelentkezni. Minden böngészőpéldány indításakor elméletileg új session fog indulni, ha php-t használunk egy adott weboldal frontendjében és backendjében is.
Kicsit máshogy, ez azt jelenti, hogy indítok két böngészőt egyikben a frontendet (vagy mást) nézek a másikban a backendet használom. Amennyiben a backend részbe bejelentkeztem, elvégzek néhány műveletet, amit kell és bezárom az ablakot, ugyan van kijelentkezés modul, de nem feltétlen fogja a felhasználó úgy kezelni a böngészőt és a backendet.
Miután bezártam az ablakot, átmegyek a másik böngészőablakra - ahol a frontend vagy bármilyen oldal van - és beírom egy admin oldal elérési útját és violá máris bennt vagyok a backend részben! Ez egy elég rizikós biztonsági rés. A kérdésem ezt hogyan lehet elkerülni?
Üdv
Sanyi
referer
<Nincs cím>
Üdv
Sanyi
Van, hogy jogosan nincs benne
utóbbit az alábbi kódrészlettel tesztelheted:
A második esetben meg persze, hogy a login oldalra akarod küldeni.
<Nincs cím>
Namármost a fennti esetet megcsinálva egyszerűen ez történik. A böngésző egyik példányában belépek az admin oldalra, akkor a másik böngészőben már visz oda a belépés oldalra, hanem egyből megmutatja az (adminhoz, backendhez tartozó) oldalt, ráadásul a két böngészőben ugyanaz a session, magyarán mondva a remote host-hoz rendeli a session-t nem pedig a böngészőpéldányokhoz! Vagy rosszul látom a dolgot?
Tehát, ha két böngészőablakot nyitok, akkor csak az egyikben szeretném, ha az admin oldal futna, a másikat automatikusan kitiltaná! Ez hogy lehet megcsinálni?
ÜDv
Sanyi
nem böngészőablakhoz kötődik
<Nincs cím>
Üdv
Sanyi
onunload
Attila
<Nincs cím>
<Nincs cím>
<Nincs cím>
vagy hogy a felhasználók x%-a a monitorra írja a user/pass párost.,
etc, etc...
<Nincs cím>
Megoldási lehetőségek
Bár az is lehet, hogy magát az admin oldalt hagyja ott nyitva (meg fog történni úgyis :), az ellen semmi nem véd.
A referer miért nem jó?
A HTTP_REFERER-es megoldás miért nem jó?
<Nincs cím>
Üdv
Sanyi
pont az, hogy nem jutsz be
amit javasoltam az az volt, hogy a normál autentikáció mellett még megvizsgálod a REFERER értékét. Ha ennek az értéke nem egy előző admin oldal, akkor az aktuális sessiont érvényteleníted, és kirakod a login oldalra. Ha nem létezik ez a változó még, akkor biztos, hogy nem lesz az értéke egy előző admin oldal, tehát login szükséges. Azt hittem, ez már az első hozzászólásomból tiszta lesz.
ps: ha írnál témamegjelölést is a hozzászólásaidhoz, az nem lenne rossz!
Lásd. korábbi hozzászólások
"referer vagy akkor nincs, ha le van tiltva ez az opció a böngészőben, vagy pedig ha az címsorba kézzel lett beírva az oldal címe"
Természetesen, ha le van tiltva ez az opció, akkor nincs meg a REFERER érték, ami azt vonná maga után az ilyen fajta ellenőrzéskor, hogy a bejelentekzés oldalra tobbna állandóan!
Üdv
Sanyi
UI: a téma indításánál volt témamegjelölés, az nem elég, vagy tényleg valami másra gondoltál, ritkán kérdezek itt, ezért nevezném magam kicsit tudatlannak
böngészőben letiltás - használat idejére engedélyezze
Erre mondtam azt, hogy Ennyit el lehet várni tőle szerintem.
A témamegjelölés meg azért hasznos, ha teszem azt valaki a követőben nézi, hogy mi hol tart, pl. http://weblabor.hu/koveto/1708 , akkor elég zavaró az a sok "Nincs cím"
nem túl szép megoldás, de...
get-tel folyton át kell adnod a session nevet (minden link-be, form-ba beírni), de így ugyanabból a böngészőből több felhasználó nevében is be tudsz lépni.
magyarán :)
vissza gomb
minden formba, linkbe bele kell építeni egy mezőt, ami egy egyedi id-t tartalmaz (minden egyes lapletöltésnél képződik egy id, mondjuk idő (microtime-os) + userid + nagy random szám).
az adatbázisba kell egy tábla, ami alkalmas a fenti id tárolására.
amikor elküldesz egy formot vagy klikkel egy linkre, ellenőrzöd, hogy az az id már valaha küldésre került-e (ránézel a táblára). ha igen, dobsz egy képernyőt, hogy nem kell a refresht/back gombot piszkálni, különben meg elfogadod és feldolgozod a lapot, plusz eltárod az egyedi id-jét a táblába
macerás ez is, de nem megoldhatatlan. ráadásul ha még valahogy eltárolod, hogy milyen adatokat küldött, akkor rendelkezésedre áll egy full log a felhasználói aktivitásról
<Nincs cím>
$_SESSION['is_admin'] = true;
és ezt egyaránt ellenőriznéd a frontend és backend oldalakon? A backend ablak onunload eseményére pedig meghívsz egy scriptet (popup-ban, mint a freemail-nél), ami false-ra állítja a
$_SESSION['is_admin']
-t, pl:closeadmin.php: