Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: Ukládání hesla do DB

Aktivity
Avatar
Neaktivní uživatel:13.4.2013 14:05

Zdravím, chci si naprogramovat web s registracemi a aukcí pro herní server. Nikdy jsem ještě do Databáze neukládal hesla atd, snažil jsem se v adminovi najít nějaký způsob šifrování, ale nic takového jsem nenašel, asi špatně hledám :D Jaký mám použít datový typ, kde najdu nějakou možnost šifrování? Má se to šifrovat v PHP scriptu nebo až v databázi?

Odpovědět
13.4.2013 14:05
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:13.4.2013 14:11

Zašifruješ si to v PHPčku. Budeš potřebovat funkci hash s nějakým rozumným algoritmem a sůl.

Nahoru Odpovědět
13.4.2013 14:11
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:13.4.2013 14:13

Yes, to jsem našel něco v ASPčku:

http://www.aspheute.com/…20040105.asp

Je tohle možný nějak udělat i v PHP :P?

Nahoru Odpovědět
13.4.2013 14:13
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:13.4.2013 14:15

Stačí to mnohem jednodušeji, třeba takhle:

function otiskHesla($heslo)
{
  return hash('SHA512', $heslo . 'mojeUNIkatNiSUl456');
}

EDIT: měl jsem tam blbě závorku :)
Editováno 13.4.2013 14:16
Nahoru Odpovědět
13.4.2013 14:15
New kid back on the block with a R.I.P
Avatar
Odpovídá na David Hartinger
Neaktivní uživatel:13.4.2013 14:22

a když to chci zase rozšifrovat tak se to znovu hashuje :P?

Nahoru Odpovědět
13.4.2013 14:22
Neaktivní uživatelský účet
Avatar
anonyma645
Člen
Avatar
anonyma645:13.4.2013 14:43

Mas v DB hash, a formular pro prihlaseni. Zahashujes heslo a zkontrolujes hash hesla s tim heslem ktere mas ulozene v DB.

 
Nahoru Odpovědět
13.4.2013 14:43
Avatar
Eflyax
Člen
Avatar
Odpovídá na Neaktivní uživatel
Eflyax:13.4.2013 14:45

Znovu se to již nehashuje. Obecně platí, že to, co je zahashované už nejde nikdy rozšifrovat. No, jde to... ale to bych teď neřešil :)

Hashování si můžeš představit jako otisky prstů u lidí. Pokud chceš nějaké hesla zašifrovat, je to jako kdyby jsi někomu vzal otisk prstu. Z otisku prstu nikdo nezjistí, kdo je ta konkrétní osoba -> stejně tak z hashe hesla.

Pokud se pak tedy chce někdo přihlásit, tak heslo které zadal zahashuješ a porovnáš ho s hashem hesla v databázi (Porovnáš otisky prstů).

Jak jsem psal, lze to "dešifrovat" (ne v pravém slova smyslu). Existují databáze (rainbow tables) kde jsou tyto hesla předem vypočítaná (zašifrovaná) -> zde pak vyhledáváš konkrétní hash (otisk) a vedle něj je v databázi uložené heslo. Je to tedy něco jako databáze otisků prstů, kde si můžeš k otisku prstu najít konkrétního člověka (konkrétní heslo). Aby se zabránilo tyto hesla předem vypočítávat, používá se ještě takzvaná "sůl". Tato sůl otisk hesla pozmění. Pokud sůl používáš, musíš ji pak používat všud v programu (stejnou) jako je třeba registrace, přihlašování, změna hesla atd. Osobně doporučuji jako sůl používat například uživatelské jméno -> pokud ti pak někdo nabourá DB a stáhni se hashe a začne je lámat, bude mít trochu problém. Pokud dešifruje jedno heslo, tak i přesto, že dva uživatelé mají heslo stejné, tak nenajde dva stejné otisky (každý uživatel má jinou sůl).

Editováno 13.4.2013 14:45
Nahoru Odpovědět
13.4.2013 14:45
Keep it simple
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:13.4.2013 14:58

Nepleť si šifrování a hashování. Šifrovaný text lze dešifrovat. Hash je otisk, který ztrácí původní informaci a je tedy nevratný. Kvůli tomu je hashování hesel bezpečné, jelikož ty heslo uživatele ani neznáš, znáš jen jeho otisk. I kdyby ti ukradli databázi otisků, tak původní hesla uživatelů již nikdo nezíská. Vím o velkých firmách, co hesla jen šifrují (což je špatně, mají se hashovat), proto když se někam registruji, generuji si náhodné heslo, nikde nemám stejné.

Nahoru Odpovědět
13.4.2013 14:58
New kid back on the block with a R.I.P
Avatar
Neaktivní uživatel:13.4.2013 15:07

áha, tak to potom jo. Takže je bezpečný mít sůl s hashovaným heslem v databázi, když se k tomu někdo dostane tak je mu to stejně k ničemu :)

Paráda, díky vám, dobré víly :D

Editováno 13.4.2013 15:09
Nahoru Odpovědět
13.4.2013 15:07
Neaktivní uživatelský účet
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na Neaktivní uživatel
David Hartinger:13.4.2013 15:10

Sůl připojíš k heslu přes vytvořením hashe. Je to z toho důvodu, že pro několik nejznámějších hesel (třeba když si nějaký idiot dá jako heslo "password") existují zde již zmíněné rainbow tabulky, kde se dá podle otisku zjistit původní heslo. Když ti někdo zadá password a ty k tomu připojíš sůl, budeš mít passwordMojeSUl54, to už v tabulce mít nebudou.

Nahoru Odpovědět
13.4.2013 15:10
New kid back on the block with a R.I.P
Avatar
Josef N.
Člen
Avatar
Josef N.:14.2.2022 9:30

Ahoj,

trochu bych to hash('SHA512', $heslo . 'mojeUNIkatNi­SUl456'); začátečníkovi zjednodušil. Asi bude tápat s tou solí, proto bych mu to dal jako stejně, ne-li více bezpečnou možnost, s použitím PHP funkcí password_hash() a password_verify().

<?php
// zpracování formuláře, výpis výsledků zadání hesla
  if (!empty($_POST[$submit])) {
    // tady načteme heslo z databáze a dáme do proměnné $hash_heslo
    $heslo2 = $_POST['heslo']; // heslo zadané z formuláře
    // porovnání hesel password_hash()-> password_verify()
    // $heslo2 se zadá do formuláře, $hash_heslo se načte z databáze
    if (password_verify($heslo2, $hash_heslo)) {  // porovnání hesla zadaného z formuláře (zároveň password_hash($heslo2) se správnou solí)
      echo 'Správné heslo!';
    } else {
      echo 'Špatné heslo.';
    }
  }
?>
Nahoru Odpovědět
14.2.2022 9:30
Ne estas pano sen laboro!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 11 zpráv z 11.