ako sa pouziva digest autorizacia v PHP?
nemozem to na internete najst
please, help
Mohu potvrdit, že na Internetu je toho o Digest autentifikaci opravdu hodně málo, narozdíl od Basic authentifikace.
V jiných příspěvcích jsem psal o teorii Digest autentifikace:
http://www.webzdarma.cz/forum/read.php?f=2&i=11065&t=11063
http://www.webzdarma.cz/forum/read.php?f=2&i=11194&t=11190
Teď napíšu praxi - narozdíl od teorie resp. bezpečnosti v naprosto odlišné rovině od Basic, je praxe s Digest praxi Basic velmi podobná.
Ale nejlépe to poznáte z příkladu:
Soubor .htaccess:
AuthName "Soukroma slozka"
AuthType Digest
require valid-user
AuthDigestFile /3w/wz.cz/n/WEB/SLOZKA/.souborshesly
Soubor .souborshesly:
uzivatel1:Soukroma slozka:3926efd781f7d330f3779b43426d2cf7
uzivatel2:Soukroma slozka:d13da9b2545b8c2070f2ccc658d0db91
A ty hodnoty na konci nejsou nic jiného, než MD5 hash hesel:
prvni
druhy
mistral: a na strane klienta musi byt tiez nejaky script?
vsak tie hesla sa v subore .soborshesly same od seba nezakryptuju...
ako prehliadac pozna ze ide o digest autentifikaciu, ci tam sa musi pisat nejaky zlozitejsi skript na prihlasenie? lebo podla prikladu co si napisal je to az prilisna podoba s basic.
"a na strane klienta musi byt tiez nejaky script? vsak tie hesla sa v subore .soborshesly same od seba nezakryptuju..."
No samozřejmě je potřeba použít nějakej prográmek, kterej ty hesla zahashuje (nebo součástí Apache je aplikace htdigest, která vytvoří onen soubor s hesly nebo do něj přidá nového uživatele). Ale zahashování hesla je jedna řádka v PHP:
echo md5("heslo");
nebo existují JS:
http://pajhome.org.uk/crypt/md5/
A samozřejmě, že si jde napsat jednoduchej PHP skript, kterej ty uživatele do toho souboru bude přidávat taky - přidá se prostě řádka:
username:realm:md5("heslo")
Ostatně, zdroják htdigest je beztak na Internetu taky...
"ako prehliadac pozna ze ide o digest autentifikaciu, ci tam sa musi pisat nejaky zlozitejsi skript na prihlasenie?"
Skript si můžeš napsat, ale proč? Ulož to do souborů popsaných výše a o všechno ostatní se stará Apache. Ten udělá to samé, co by se posílalo ve skriptu, prostě HTTP hlavičku:
HTTP/1.1 401 Authorization Required
Date: Mon, 26 Apr 2004 08:38:58 GMT
Server: Apache/2.0.48 (Unix)
WWW-Authenticate: Digest realm="Soukroma slozka", nonce="nahodna hodnota", algorithm=MD5, qop="auth"
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: delka
Connection: close
Content-Type: text/html
"lebo podla prikladu co si napisal je to az prilisna podoba s basic."
Já za to nemůžu, prostě to tak je :-) "Kdo nevěří ať tam běží", nebo ať si to vyzkouší, že je to pravda :-)
ale ked potrebujem digest cez PHP a nie v .htaccess tak dam do PHP toto:?
<?
Header("HTTP/1.1 401 Authorization Required");
...
Header("WWW-Authenticate: Digest realm="Tajna zona",
nonce=\""md5(UniqID())"\", algorithm=MD5, qop="auth");
...
Header("Content-Type: text/html")
a potom
if ($PHP_AUTH_USER == "jozo" && $PHP_AUTH_PW == "tajneheslo"):
echo "vitaj, jozo"
endif;
Proč to dělat jednoduše, když to jde složitě, že?
Ne, tak jednoduchý to samozřejmě není - ono by to takhle vzhledem k použití MD5, hodnoty nonce apod. ani nedávalo smysl :-) Jestli to bereš takhle, tak s Basic to opravdu příliš podobu nemá (u Apache ano, protože ten už to má implementováno, ale když chceš použít mermomocí vlastní skript...).
Viz použitá třída class:
http://www.webzdarma.cz/forum/read.php?f=2&i=11094&t=11084
Mira 20. 04. 2004 16:12
ja potrebujem ochranu cez skript lebo potrebujem aj ine veci ako len chranit zlozku.Kazdy uzivatel bude mat zaznam v DB. Budu dve tabulky. V jednej bude login, heslo (MD5 hash), uroven, meno a priezvisko. V druhej bude login, uroven a session
ked niekdo pojde na stranku napr. tajna1.php?sid=123456789
skontroluje sa ci je v druhej tabulke zaznam s takym session cislom
ak bude zobrazi mu stranku a vygeneruje nove session cislo ktore v tabulke zmeni, inac mu zobrazi cez header okno s digest autorizaciou a skopiruje login uroven a vygeneruje nahodne session cislo
v inich skriptoch bude kontrolovat aj uroven napr. skript admin.php bude vizadovat uroven 3 a ine len 2 alebo 1.
odhlasenie len vymaze zaznam z druhej tabulky
taktiez casom mozno doplnim aj logovaci subor, vypis on-line uzivatelov ktory su prihlaseni (maju zaznam v druhej tabulke)
keby som potreboval len chranit zlozku tak to urobim v pohode, o tom je na webe dost, lenze o pouziti v PHP nic
vopred diky
Lackop
>> lenze o pouziti v PHP nic
Jednoduse proto, ze to zatim nejde...
Tečka:
>> A ty hodnoty na konci nejsou nic jiného, než MD5 hash hesel
U digest se hashuje username:realm:heslo, to je IMHO to, na co se nejvic zapomina...
Ano, už jsi mě opravoval v květnu ;-)
http://www.webzdarma.cz/forum/read.php?f=2&i=11833&t=11770
V té době už jsem to dávno zkoušel, protože Digest je na wz od dubna, a md5 hashe do souboru s hesly jsem si počítal sám, nikoliv pomocí nějakého programu Apache, tak nevím, proč jsem tam plácal takovou blbost :-)
To že to PHP nepodporuje je pro mě záhada stejně jako nepodpora odhlášení HTTP autentizace v prohlížečích (kromě Mozilly resp. Gecka)...