Autor Zpráva
Jan Onesork
Profil
Dobrý den,
mám autentifikaci na webu řešenou tak, že se náhodně generovaný hash ukládá do cookie a to se následně porovnává s databází.

Problém je ten, že toto jedno cookie potřebuji načítat z více domén -> držet autentifikaci přes více navzájem propojených webů.

Dá se tento problém nějak vyřešit? Pokud ne, jak mám držet uživatele přihlášeného, aby to bylo bezpečné?
llook
Profil
Jedno cookie pro více domén nelze. Jedině u subdomén, pokud cookinu nastavovala nadřazená doména (cookies ze seznam.cz platí i pro email.seznam.cz, ale naopak ne). Viz http://wp.netscape.com/newsref/std/cookie_spec.html
Jan Onesork
Profil
A šla by autentifikace tedy vyřešit nějak jinak? Víte, nechci aby to muselo být závislé na ip adrese.
llook
Profil
Dost těžko. Třeba Internet Info má pár webů sdílejících uživatele (Lupa, Root, Slunečnice) a mají to řešené tak, že se na každém webu musíte přihlašovat zvlášť.
Jan Onesork
Profil
no jo no :-( Kdyby tak šlo v setcookie() definovat více domén... kdyby...

Díky za pomoc, ještě to promyslím - ale nejspíš to asi oddělím.
Radek Hrabůvka
Profil
Jan Onesork Kdyby tak šlo v setcookie() definovat více domén... Tak by bylo jednoducé číst tvoje cookie. Jde o bezpečnostní opatření.
Příklad: napsal bych, že vím, jak na to, a návod je na stránce wvw.mojestranka.eu/prectu-tvoje-cookie, pak bych se mohl přihlašovat pod tvou identitou, to by se ti nelíbilo.
jozob
Profil
A sessions pomocou PHP by nepomohli? Keby sa prenášalo PHPSESSID ako GET parameter. Ale potom by bolo ešte asi potrebné nejak dostať premenné z jedného serveru na druhý (skopírovať potrebné súbory z tmp adresára?)... Myslím že to asi nepôjde(vzhľadom na práva), ale neskúšal to náhodou niekto?
llook
Profil
jozob
To by mělo jít. Pokud všechny weby sdílí jednu instanci Apache, tak také sdílí adresář pro ukládání sessions. Pokud ne, lze napsat vlastní session handler, který by to ukládal do databáze dostupné všem těm webům.

Ale závislost na odkazech je asi dost omezující. Když se někdo přihlásí na server1.cz a do prohlížeče zadá server2.cz, tak mu sezení zmizí.
llook
Profil
A teď mě to došlo. Přihlašovací stránka by, kromě poslání cookie za svoji doménu, obsahovala iframy se soubory z ostatních domén, kterým by předala SID a ty soubory by poslali cookie za sebe.

Takže by ve výsledku každá z těch domén měla nastavenou svou cookie.
jozob
Profil
llook
"Když se někdo přihlásí na server1.cz a do prohlížeče zadá server2.cz, tak mu sezení zmizí."
A tento problém by nešiel obísť tak, že by si na "server1.cz" uložil do DB IP aj PHPSESSID a na "server2.cz" by si zisťoval referrera a ak by bol referer "server1.cz", potom by si vybral z DB PHPSESSID? Nešlo by to tak?
jozob
Profil
llook
"Takže by ve výsledku každá z těch domén měla nastavenou svou cookie."
Čiže nebolo by rovnaké PHPSESSID?
jozob
Profil
llook
A čo vytvoriť autorizáciu pomocou MAC adresy? To by nešlo?
llook
Profil
To co jsem popsal vlastně není nic nového, je to klasická metoda používaná pro tzv. session fixation - až je s podivem, že jsem si na to vzpomněl až teď. Iframe lze nahradit obrázkem (to asi bude lepší) nebo čímkoli stahovatelným.

Řekněme že všechny naše weby sdílí databázi sezení. Pak by to mohlo vypadat nějak takhle:
<?php session_start(); ?>

...
<img src="http://druhý-web/session.php?<?php echo SID; ?>" style="visibility: hidden">

A pak v každém webu soubor session.php
<?php session_start(); ?>


Akorát obrana proti zákeřnému session fixation bude trochu těžší, to je drobná vada na kráse.

A čo vytvoriť autorizáciu pomocou MAC adresy? To by nešlo?
MAC se přes internet nepřenáší.
jozob
Profil
llook
"MAC se přes internet nepřenáší"
Niekto tu na fóre uvádzal, že ano. Takže ak nie, potom nič...
Jan Onesork
Profil
Radek Hrabůvka "Tak by bylo jednoducé číst tvoje cookie. Jde o bezpečnostní opatření. "

To si nemyslím. Při ukládání cookie bych definoval, že se může číst z domén example1.com a example2.com - z těchto a žádných jiných -> prostě Ty bys se svým mojestranka.eu neuspěl ;-)

Tenhle problém jde obejít tím, že se bude cookie ukládat pouze na jednom serveru - ale musí se vytvořit další spojení a to se mi zdá zbytečné.
Toto téma je uzamčeno. Odpověď nelze zaslat.

0