Autor | Zpráva | ||
---|---|---|---|
jrm Profil |
#1 · Zasláno: 3. 7. 2007, 17:16:39
Mám stránky, na kterých řeším OnLine několik úloh, např. návrh sestavy regulátoru podle zadaného počtu I/O v technologii, registraci firemního SW a jeho odblokování, ...
Pro předávání proměnných mezi stránkami používám i sessions. Aby se úlohy mezi sebou neovlivňovali, volím pro každou jiný název session. Na locale vidím, že jméno vzniklého session_souboru na HDD je v podstatě stejně šifrované jako předtím, když jsem jméno session nezadával. Asi to zadané jméno příkazem session_name("cosi") bylo použito k šifrování. A to je to, na co se chci zeptat. Je to tak? Případně co všechno se bere v potaz při tvorbě nových sessions od jednoho návštěvníka. Použiji jiný prohlížeč, místo FF třeba Operu = další session_soubor, atd.? A zadám-li neměnné jméno do příkazu session_name("cosi") tak doufám, že bude pro každého návštěvníka zvlášť vytvořen jeho vlastní session_soubor na serveru. Dědek děkuje mladíkům za správné odpovědi... |
||
temistokles Profil |
#2 · Zasláno: 3. 7. 2007, 17:31:08
Session_name je len identifikácia daného náhodného reťazca, lepšie asi povedať na príklade:
- Ak používaš na prenos sessions cookie, tak sa cookie bude voľat tak, ako je nastavené v session_name napr: session_name -> sid ..... vtedy sa bude cookie volať sid - Ak používaš vkladanie do URL, je to obdobné... Čo všetko ovplyvňuje výber 32 miestneho náhodného reťazca síce neviem, ale je to postavené na semináhode. V skutočnosti je mizerná rpavdepodobnosť, že odhalí niekto session len náhodnou voľbou (rádovo 1 : 16^32), session_name je teda len na pomenovanie samotnej premennej u užívateľa (v URL adrese, cookie). |
||
krteczek Profil |
#3 · Zasláno: 3. 7. 2007, 20:20:19
použij při přihlášení uživatele funkci session_regenerete_id(); ta zajistí že dva rozdílní uživatelé nedostanou session se stejným názvem po sobě
|
||
pmasarik Profil |
#4 · Zasláno: 3. 7. 2007, 20:50:28 · Upravil/a: pmasarik
použij při přihlášení uživatele funkci session_regenerete_id(); ta zajistí že dva rozdílní uživatelé nedostanou session se stejným názvem po sobě - Tak s týmto nesúhlasím.
session_regenerete_id(); - zabezpečí že pri každom reloade sa tebe zmení session_id, nie že to id nedostane niekto iný. Ak nepoužiješ túto funkciu tak počas jedného sedenia dokým sa napríklad neodhlásiš budú všetky sessions uložené na servery pod jedným ID. Pri použití tej funkcie sa bude ID meniť a potencionálny útočník má menšiu šancu ho odchytiť a zneužiť. jrm - vôbec nerieš čo riešiš, dve rovnaké ID sa dvom užívatelom určite nepridelia, o to sa stará samotné PHP. session_name je len na to aby si vedel pristupovat k spravnemu obsahu nič viac. |
||
krteczek Profil |
#5 · Zasláno: 3. 7. 2007, 21:18:28
pmasarik: psal jsem při přihlášení, to znamená jen jednou, je zbytečné stále generovat nové session_id viz: http://php.vrana.cz/prihlasovani-uzivatelu.php jedná se o ochranu před session fixation
jrm: funkci session_name() nepoužívej ale používej přímo $_SESSION['nazev'] |
||
pmasarik Profil |
#6 · Zasláno: 3. 7. 2007, 21:35:09
krteczek napísal si ta zajistí že dva rozdílní uživatelé nedostanou session se stejným názvem po sobě, čo je ale zle povedané, lebo táto funkcia zabezpečí len to, že sa staré ID v tvojej relácii zmení na nové. Nijako nezabezpečí že moje ID nedostane druhý užívatel.
Citujem - session_regenerate_id — Update the current session id with a newly generated one Mne išlo o poukázanie na zlé vysvetlenie čo urobí tá funkcia o nič iné :) |
||
krteczek Profil |
#7 · Zasláno: 4. 7. 2007, 02:48:30
Dalším typem útoku je Session Fixation. Jedná se o útok, kdy útočník klientovi nastaví nějakou hodnotu Session ID (podstrčením odkazu na webu, v e-mailu nebo např. přímou editací uživatelových cookies) a jakmile se uživatel přihlásí, tak tuto Session ID použije pro sebe. Obrana proti tomuto typu útoku je v PHP poměrně jednoduchá – stačí před prováděním citlivých operací jako je přihlašování zavolat funkci session_regenerate_id, která způsobí změnu Session ID, takže původní ID útočník nebude moci využít.
|
||
jrm Profil |
#8 · Zasláno: 4. 7. 2007, 08:18:18
Dík za info, asi jsem můj problém špatně popsal - nejedná se mi o problematiku napadení.
Jde mi o to, že na stránkách mám několik samostatných úloh a pro předávání proměnných mezi stránkami jsem používal jediné sessions pro jednoho návštěvníka. Pokud si však návštěvník stránek otevřel víc oken/panelů a v každém řešil jinou úlohu na stránkách, tak samozřejmě vítězily proměnné s posledně zpracovávané stránky, případně návštěvník prošel v jednom okně/panelu stránkou, na které byl výmaz session... Proto pro každou samostatnou úlohu chci pojmenovat sessions jinak, aby se jedinému návštěvníkovi založily sessions pro každou úlohu zvlášť. Mé pokusy na locale naznačují, že se tak snad děje. Chtěl jsem proto vědět, ve kterých (případně dalších) případech se pro jednoho návštěvníka vytváří další sessions. Pro pojmenování sessions v každé samostatné úloze používám příkaz session_name("jmeno_ulohy"). Počítám s tím, že i když je JMENO_ULOHY pro všechny návštěvníky stejné, budou každému zvlášť vygenerovány jeho vlastní sessions pro každou úlohu. Jen pro můj klid - je tomu tak? |
||
krteczek Profil |
#9 · Zasláno: 4. 7. 2007, 15:51:19
jo takhle:-)
takže používej superglobální pole $_SESSION pro každou stránku můžeš mít její název jinačí: $_SESSION['tato_stranka'] ,$_SESSION['jina_stranka'] , $_SESSION['jina_session'], nebo i pole $_SESSION['user']['jmeno'], $_SESSION['user']['prijmeni'] ... takže pokud potebuješ přenášet nějaká data jen v rámci určité skupiny stránek tak si pojmenuješ session tak abys vedel že patří jen pro toto a jinde je hledat nebudeš. nicméně pokud jde o použití session_regenerate_id() tak před nastavením session u přihlášení tuto fci zavolej (pro klid duše ;-)) |
||
temistokles Profil |
#10 · Zasláno: 4. 7. 2007, 17:30:56
jrm: funkci session_name() nepoužívej ale používej přímo $_SESSION['nazev']
Mne sa marí, že je v tom trochu rozdiel :D Ak sa nemýlim, session_name nazve premennú session-ov, ale zápis $_SESSION['nazev'] de facto vytvorí pole v session :). Overiť to však nemôžem, lebo mi dosť blbne DNS :) |
||
krteczek Profil |
#11 · Zasláno: 4. 7. 2007, 20:09:14
pardon pisu blbosti...
|
||
jrm Profil |
#12 · Zasláno: 5. 7. 2007, 11:18:46
Zjištění po mých pokusech na locale:
1) a) vstoupím na úvodní stránku index.php, přes kterou se mi načítají v podstatě skoro všechny ostatní stránky (např. http://localhost/index.php?file=./0_uvodni.php http://localhost/index.php?file=./produkty/hw2/36_pl2obecne.php http://localhost/index.php?file=./produkty/hw2/38_centraly.php http://localhost/index.php?file=./produkty/hw2/41_ccpu21.php http://localhost/index.php?file=./obchod/16_obchod.php http://localhost/index.php?file=./download/113_katalog2007.php ale i http://localhost/index.php?file=./php/disp/12_index.php pro OnLine návrh zobrazovačů XDM ) = vytvoří se standardní sessions bez použití jejich přejmenování b) Stránkám pro klasické prohlížení bych ponechal původní sessions, dalším úlohám jako je OnLine návrh zobrazovačů zkouším přiřadit nový název sessions s cílem, aby se mi vytvořil další soubor sessions na HDD. Bezúspěšně, protože volání sessions je v tomto případě společné přes index.php v kořenovém adresáři. Proto zkouším dát podmínku do index.php pro návrh XDM, a to před session_start(); if ($_SESSION['id']=="12") session_name('navrhXDM'); zda mi vznikne další soubor sessions. Bezúspěšně - soubor zústává původní, přibudou proměnné pro návrh XDM. Takže v tomto případě mne napadá vytvořit pole sessions pro každou úlohu (jako je návrh XDM) zvlášť, tj. přidat do každé $_SESSION['promenna'] stejné úlohy další index: $_SESSION['uloha']['promenna] Dál bych musel zrušit nyní použité session_destroy() a před zahájením každé úlohy smazat pouze její pole sessions. 2) nový soubor sessions se mi na HDD vytvoří pokud nejdu přes klasické http://localhost/index.php?file=./cesty/id_JmenoSouboru.php ale přímo a do nového okna/panelu http://localhost/php/reg/interni.php V tomto případě pomáhá session_name('uloha'). ------------------------------------------------------------- Tušíte někde chybu nebo máte jiný nápad? |
||
Časová prodleva: 17 let
|
0