Ako správne hashovať heslo
- iGavrilo
- Člen | 32
Zdravím komunitu,
Skúšam si robiť svoje prvé „čmáraniny“ v nette a natrafil som na jeden problém. Vytvoril som si jednoduchú registráciu a zaujímalo by ma, ako čo najlepšie (za)hash(ovať) heslo.
A ďalšia moja otázka znie ako riešite to aby sa vám nezaregistrovali 2 rôzny užívatelia s rovnakým menom. Okrem toho že v databáze nastavíte UNIQUE.
Ďakujem všetkým za pomoc
Editoval iGavrilo (15. 12. 2015 20:49)
- premek_k
- Člen | 172
Skúšam si robiť svoje prvé „čmáraniny“ v nette a natrafil som na jeden problém. Vytvoril som si jednoduchú registráciu a zaujímalo by ma, ako čo najlepšie (za)hash(ovať) heslo.
K tomu bych ti doporučil toto video: https://www.michalspacek.cz/…ofit-develcz
A ďalšia moja otázka znie ako riešite to aby sa vám nezaregistrovali 2 rôzny užívatelia s rovnakým menom. Okrem toho že v databáze nastavíte UNIQUE.
Já nijak. Proč by nemohlo být registrováno více uživatelů se stejným jménem?
- CZechBoY
- Člen | 3608
Udělám si unikátní klíč v databázi. Při registraci si kontroluju
jestli už takovej email není v databázi.
Případně pokud to je jedinej unikátní klíč v tabulce tak můžeš
zkontrolovat jestli náhodou není vyhozena vyjímka UniqueConstraintViolationException
Jinak autentizace + registrace třeba viz sandbox: https://github.com/…rManager.php
Editoval CZechBoY (15. 12. 2015 22:58)
- Aurielle
- Člen | 1281
@iGavrilo: příklad máš na tom linku, který sem už házel @CZechBoY. Pro jistotu znovu, tady: https://github.com/…rManager.php
- Zuben45
- Člen | 268
Vastlik napsal(a):
Rozhodne bych nepouzil sha256, používej spíš bcrypt. Osobně bych použil nativní funkce Nette nebo PHP.
sha256 jsem používal kvůli napojení na Minecraft systém (přihlašování na mc server,nakupování apod..), a už mi to zůstalo :). Jinak díky za radu, určo si s tím zkusím pohrát :)
PS: Proč by mělo být více uživatelů se stejným jménem ? Vždyť se jedná o přihlašovací jméno a to by mělo být unikátní ne? Příklad: někdo kdo má stejné jméno si splete heslo a čirou náhodou se přihlásí na jiného uživatele. Vím, že je strašně malá pravděpodobnost, ale i tak, a navíc je lepší uživatele rozlišovat podle jméno například kvůli fóru :)
Editoval Zuben45 (17. 12. 2015 8:57)
- Vastlik
- Člen | 58
Zapomněl jsem poslat zdroj. http://crypto.stackexchange.com/…vs-hash-salt
Jinak důvod proč používat bcrypt je z důvodu toho, že jeho algoritmus je
navržen na tvorbu hesel, takže je naschvál pomalejší a chrání tak proti
crackovani bruteforce.
- Zuben45
- Člen | 268
Vastlik napsal(a):
Zapomněl jsem poslat zdroj. http://crypto.stackexchange.com/…vs-hash-salt
Jinak důvod proč používat bcrypt je z důvodu toho, že jeho algoritmus je navržen na tvorbu hesel, takže je naschvál pomalejší a chrání tak proti crackovani bruteforce.
ach tak :), koukám že PHP už toto využívá v fcích http://php.net/…password.php :)
Jen teď budu muset překopat všechny uživatelské hesla :), napadá mě akorát využití fce na hesla co mám a ten obalit do
password_hash
Editoval Zuben45 (17. 12. 2015 9:14)
- Oli
- Člen | 1215
@Zuben45 koukal jsi sem? https://github.com/…rManager.php#L49. Staci pouzit tu tridu Passwords a pokud bude nevyhovujici hash, tak ti to prehashuje
- Zuben45
- Člen | 268
Oli napsal(a):
@Zuben45 koukal jsi sem? https://github.com/…rManager.php#L49. Staci pouzit tu tridu Passwords a pokud bude nevyhovujici hash, tak ti to prehashuje
Myslíš že to zvládne i jak to mám přes vl. fci calculateHash ? :)
PS: Nechápu za co Dislike (https://forum.nette.org/…shovat-heslo#…), jen se snažím pomoct… :/
Editoval Zuben45 (17. 12. 2015 10:02)
- Zuben45
- Člen | 268
CZechBoY napsal(a):
@Zuben45 NIkde tam opravu hashe nevidim, takže nezvládne.
Minusy máš za to, že
- vkládáš celkem nečitelnej kod
- napojení na již existující systém, na který se tazatel neptal
- nechápu jak můžeš mít dvě funkce
calculateHash
, když by měl bejt výsledek hashování vždycky stejnej
Aha, no mělo to být jen jako ukázka. za 2. bod se omlouvám a u 3. Musí tam být dva a to kvůli této části u registrace:
for ($i = 0; $i < 17; $i++) {
$n = rand(0, $alphaLength);
$pass[] = $alphabet[$n];
}
Vastlik napsal(a):
@Zuben45 ta funkce dělá to, že veme hash co mas zjistí, jestli sedí s algoritmem co používas a pokud ne, prehashuje ho.
Myslim, že takhle funguje, možná mě někdo opraví.
Takže by to mělo fungovat i na tvůj algoritmus. :)
Dobře, díky moc, určitě vyzkouším.
Editoval Zuben45 (17. 12. 2015 11:47)