zdravím.
chtěl bych nějakým způsobem chránit hesla uživatelů v DB, ale fce
hash_hmac() mi píše: Call to undefined function: hash_hmac().
Je to tím, že verze php 4.něco používaná na wz tuto funkci nepodporuje?
Případně mi prosím poraďte co s tím nebo jak tuto funkci nahradit jinou.
děkuji za odpoveď
no podle manualu php ta funkce neni ani v php5. takze bud si tu funkce sezenes, nebo si napises vlastni, nebo si vystacis s prostym md5 nebo sha1 nebo jejich kombinacema, opakovanym pouzitim a podobne
Podle manualu je tato funkce podporovana az od verze PHP5.
Dostatecnou nahradou na tvuj problem staci funkce MD5() pripadne SHA1().
<HTML>Manuál říká, že je ta funkce podporována až v php5. Sha1() nebo md5() ti nestačí?</HTML>
pokud vim,tak md5 uz neni uplne bezpecna. postaral se o to jisty cesky chlapik, jehoz jmeno jsem zapomel.
sha1 bych nechtel pouzivat, protoze se obecne doporucuje prechod minimalne na sha256, ale asi nebudu mit jinou moznost nez tu sha1.
o5z5: no ony bezpečné nejsou ani tebou požadované funkce. No a ten český chlapík nebych jeden, ale bylo jich (pokud si dobře pamatuju) víc a přišli na to, jak zefektivnit "tunelování" (neboli z procesu na pěkolik desítek hodin udělali práci na pár minut)
Já osobně věřím, že nejbezpečnější je neznalost útočníků. Proto používám vlastní funkci, která nedělá nic jiného, než že v přesně daném pořadí provede s řetězcem určité operace (například posun v abecedě, rozložení na části, zpřeházení, otočení, převody mezi soustavami, ...) no a i když je to funkce oboustanná, tak mám hřejivý pocit, že hesla ve své databázi chráním dostatečně.
OT: Zajimavy, jak ve stejnou dobu odpovi 3 lide uplne stejne na stejnou otazku ;)
hm zvlastni, asi mam nejakej spatnej manual. v online to je, ale v te chm verzi pro offline pouziti ne. tak se omlouvam za mystifikaci.
md5 se dá rychle prolomit pro jednoduchá hesla (jak jsem se dočetl). Takže si nemyslím, že md5 je nepoužitelná. Navíc je to otázka toho, co chceš chránit. Pokud je to přístup na stránky třídy, tak se zabýváš malichernostmi. Navíc daleko lepší je na prolomení čehokoli použít (teď použiju termín, doufám, že správný) "sociální hacking". Osobně jsem vyzkoušel, s minimem námahy, maximální účinek. A tam ti nepomůže ani ssl, sebelepší kryptování, prostě nic.
Kdyz nechces md5 ani sha, pak si napis vlastni, bezpecnejsi.
Script na prolamovani je klasicky algoritmus na doplnovani.
Md5 ale taky neni urcena k sifrovani, to je kontrolni algoritmus spravnosti dat. Totez sha. Ze se tim da sifrovat je vec jina.
Ten algoritmus najde prvni reseni, ktere odpovida vysledne sifre. Takkovych reseni mohou byt v rozsahu 1-20 znaku i miliony. Je pravdepodobne, ze pokud mas heslo 4 znakove, tak jedno z prvnich reseni bude heslo. Ale lze k pristupu pouzit kterekoliv z toho milionu reseni a samozrejme lze pokracovat od 21-n k dalsim bilionum...
Ted je otazka, co chces zabezpecit a jak moc je to dulezite. Pro heslo bezneho uzivatele staci md5/sha1. Tam jde o to, ze kdyz nekdo odchyti transakci, tak nemuze to heslo vyzkouset v dalsich programech, kde se ty prihlasujes, protoze zna jen hash a prislusny dekodovany text.
Pokud to ma byt super bezpecne, tak je treba krypovat jeste pred odeslanim, treba JS (hacker si to ale muze nastudovat, takze opet lze pouzit jen pro hash md5/sha1), nejlepe HTTPS.
Tez je mozne pouzit vicenasobne sifrovani a prodlouzit retezec, zabezpecit dle ip.
1)
$x = $psw.$login.$ip;
$heslo = md5($x);
1b)
$x = $psw."ahoj".$login."nazdar".$ip;
$heslo = md5($x);
1c)
$x = md5($psw."ahoj") xor md5($login."nazdar");
$heslo = $x; ... zkus toto desifrovat :) pokud nevis, ze je to zaxorovane a 2 md5 a neznas oba 2 retezce, tak hodne stesti :)
2)
$heslo = sha1(md5($psw).md5($login).$sha1($ip));
ale treba zvazit vicenasobne pouziti, sha i md5 muze chvilku trvat a pri takovych 100 online uz tomuze byt citelne.
1) rozlisujte hashovani (jednosmerny algoritmus) - neco jako kontrolni soucet,proste ze data odpovidaji puvodnim datum z kterych hash byl porizen, a sifrovani (obousmerny algoritmus) - slousi k utajeni puvodnich dat, z zasifrovaneho bloku dat lze ziskat puvodni data pri znalosti pouziteho sifrovaciho algoritmu a hesla.
2) davat do ulozeneho hashe hesla IP adresu je hodne velka kravina, miliony lidi stale jedou pres DHCP, i pokud mate statickou, cas od casu se muze stat ze vam ji ISP zmeni kvuli predelavani site, apod.
a co kdyz se budu chtit prihlasit kdyz budu na dovolenej nekde? nebo v kavarne?
Mike (specialfx.xf.cz)
je videt, ze jsi IP jeste nikdy nepouzival :)
Finta totiz spociva v tom, ze si do session zasifrujes IP jeste s nejakym kodem a tento hash potom pridavas k paswordu :)
a protoze to nevytahujes z uzivatele, tak jedinej problem bude, kdyz se uzivatel neodhlasi a prejde na jiny pc v jine siti. bude muset pockat, az mu vyprcha session
<HTML>Peta:
mozna mi neco uniklo ale chapu to takto:
session: hash(IP+nejakykod)
password DB: hash(heslo).hash(session)
budu, prihlaseny, odejdu na jine PC.. tak se musim znovu prihlasit....
a tady to je jak? musim se prihlasit abych neco dostal do session? Protoze tak ci tak se musi znovu provest
session: hash(IP+kod)
a to pak neodpovida pridanemu hashi k passwordu takze se musi vygenerovat nove heslo?
Rozumim tomu, kdyz se za klasicky hash prida nejaky nesmysl na zmateni ktery se pri kontrole nepocita, to ale obycejne byva napevno a tve reseni pokud to chapu vyzaduje zmenu hesla (presneji koncoveho pridaneho hashe v DB napr.) pri kazdem prihlaseni z jine IP nez minule?</HTML>
peta: ne, nikdy jsem IP do hashe nepouzil a ani nikdy nepouziju.
proc ne? protoze je to kravina (viz prispevek od Richarda)
<HTML>Ja netvrdim ze to je zrovna kravina, nebo ze to nelze... Jen me zajima tento pripad protoze jsem asi moc nepochopil jak presne to pracuje</HTML>
no, prave tim pouzitim IP adresy (tedy promenne hodnoty) z toho vznika nesmyslny (nebo minimalne naprosto nevhodny zpusob).
z toho co peta napsal, tak bud
- pri hashovani se prida ip adresa k heslu, a to se ulozi. pak ale neni mozne zjistit co je heslo a co pridana IP (pokud to pridany neni ulozeny v dalsim sloupci, coz je blbost) = s jinou adresou se nelze prihlasit
- pri hashovani se prida IP, vysledkem bude 32znaku dlouhy hexa kod, ten sdelime uzivateli a ten se bude prihlasovat pomoci 32znaku hexa kodu = velmi pravdepodobne, ze :)
- da se hash hesla, k tomu se pripoji hash ip adresu. pri prihlasovani se udela hash hesla a porovna se s prvnimi X znaky hashe v DB. v tomto pripade IP neni potreba, je to jenom datovej odpad, k nicemu to tam neni, akorat to zabira misto. kdyz se cracker dostane k DB, uvidi hash, a kolizi si najde tak jako tak
- ... dalsi moznost me uz nenapada
peta: nechces me pouzit a odkazat na nejakej funkcni kod tvy reseni pouzivajici?
Mike (specialfx.xf.cz)
fakt jsem se snazil, 20 minut jsem to psal. Pak mne to odlogovalo. Smula. Tohle forum neni na logicke a programovaci debaty. Mozna nekdy na japsatweb. Nemam silu to psat znova, pac je 30 stupnu ve stinu...
Rekni richardovi, at zrusi to odhlasovani a pak muzem pokecat :) uz mne to nastvalo asi po 15cte. Jinak je to forum fajn.
Mozna jeste na tema Kolik je vam let 400 prispevku na obrazovce, fakt sila :)
OT: Peta: Je to nelogicke, ale prihlasovani je spojeno i s prihlasenim administrace. Takze pokud se to automaticky neodhlasi a nekdo odejde, tak ten druhy se muze dostat do adminstrace a zmenit udaje.
Pro dlouhe zapremysleni to staci nekde napsat, klidne i sem, a pouzit pak metodu copy/login/paste.
<HTML>Viz Tomík
Sam to musim delat metodou write/copy/login/paste kdyz pisu neco delsiho a zvykl jsem si na tento nedostatek</HTML>
Richard (moderátor)
ja treba ne. Jsem zvyklej na jakpsatweb minibb a tam to drzi v cookies.
Tomík (tom.czweb.org)
takhle, jde o to, ze mi to smazalo. Dam zpet a je to smazane. Coz mi prijde jako bug fora. Na minibb dam zpet a prispevek je tam. Jenze tam je login v cookies. Proste smula, psat to znova nebudu. Tak pekne bych to nevymyslel...
Jdeme ted uz vic mimo, ale jeste rejpnu. Peto. Smim se zeptat co pouzivas za prohlizec? On to totiz neni bug fora, ale prohlizece. Pouzivam operu a ta si pamatuje predchozi stav. Tvuj "bug" dela v podstate jen IE.
Ale jak uz furt rikam, je to vec nazoru. Tobe se libi minibb a FAR a mne zas ne.
Tomík (tom.czweb.org)
minibb se mi nelibi. Libi se mi jeho fungovani s neodhlasovanim pri psani delsiho prispevku. Premyslim, ze napisi vlastni jednoduche forum. Ono miniBB mi takove mini ani neprijde :) Zatim mam jeste 2 projekty, ktere bych mel dodelat...
Far je nej.
Prohlizec pouzivam na vse Firefox. Jak jsem popsal, tak mi to u minibb nedela a tady ano. Tady mne odloguje. Dokonce ti muzu rici, kde si myslim, ze je chyba.
Myslim si, ze kdyz tady poslu prispevek, tak se stane toto:
- zavola se script zpracuj
- script zpracuj vyhodnoti, ze nejsi prihlaseny a tak te presmeruje na jinou stranku
- bohuzel pri teto akci se presmerovanim pres GET ztraci udaje POST, coz by ani neva, ale prohlizec to pojme jako novou udalost, novou stranku a smaze vyplnene udaje.
Takze problem je v tom, ze se to posila pres meziscript.
Stejnym zpusobem pisi sve programy, jen mi to nedela. Proc? Mam hezky script v obflush.
Mas nekde zdrojaky tohoto fora nebo jen php, ktere to zpracovava?
A pouzil jsi nekdy tlacitko zpet? to je to o cem mluvim. Je jasny, ze pri zpracovani se ztrati data, ale opera a firefox by si mely pamatovat, co jsi zadaval pred kliknutim na tlacitko a to tak, ze kliknes na tlacitko zpet.
WZ ma vsak prece jen mensi bug. A to dvoji volani. Jednou kliknes dopredu, ale zpet musis nadvakrat. Je to chyba javascriptu, takze staci JS vypnout.