Tento článek doposud nikdo nehodnotil

Jak bezpečně uložit heslo do databáze

Efektivní a jednoduchá ochrana hesel v databázi.

Programovali jste někdy aplikaci, ve které by se nacházelo přihlašování uživatelů? Zajímá vás, jak účinně chránit hesla v databázi? V tomto článku se vám pokusím přehledně objasnit několik způsobů ukládání hesel.

Ukládání hesel v text/plainu

Nejjednodušší způsob, jak uložit hesla je ve formě textu. Heslo se uloží do databáze v takovém tvaru, v jakém ho uživatel zadal. Při přihlášení se opěk kontroluje přímo uživatelem zadané heslo. Tento způsob ukládání hesel však důrazně NEDOPORUČUJI.

Problém totiž nastává v případě, že se nám do databáze dostane neoprávněná osoba (hacker) a hesla si zkopíruje k sobě. Pokud uživatelé na vašem webu nemají zrovna extra citlivé údaje, nemusí se toho až zas tolik stát, jenže většina uživatelů používá stejná hesla u více služeb. Heslo, jaké mají na vašem webu, mohou klidně mít u e-mailu nebo dokonce u internetbankingu. Důsledky si pak jistě dokážete představit.


Hashování hesel

Vcelku spolehlivý způsob jak ochránit hesla v databázi je hashování. Hashování je dost podobné jako šifrování s tím rozdílem, že z hashe již nejde získat zpět původní hodnotu.

Jak to celé funguje?
Na vstupní text se použije jedna z hashovacích funkcí (v php to jsou md5() a sha1()). Výstupem je pokaždé stejně dlouhý řetězec(hash).

Př.: 

<?php
echo sha1("ahoj"); // zobrazí edb433bdd7c13851c7c68cb31a5acf33a80cd2cc 
echo sha1("ahojj"); // 3fe0502597ca87f53a782bbb5e32128caae81063 
?>

Jak jste si mohli všimnout tak stačí změnit 1 znak ve vstupním textu a výsledný hash je úplně jiný. Díky tomu nelze nijak odvodit text podle hashe podobného textu.

Tento způsob ochrany hesel se dá doporučit všem, kteří dělají stránky, u kterých není perfektní zabezpečení nezbytné, a zároveň nechtějí dát případným hackerům moc snadnou práci se zjištěním hesel.

Nevýhody
Přestože je tento způsob ukládání hesel o hodně bezpečnější než předchozí, stejně se najdou trhlinky, které mohou za jistých okolností heslo prozradit.

1) na internetu existují weby, které umí podle hashe zobrazit původní heslo (http://www.md5cracker.pl).
Naštěstí není možné nijak rozluštit hash jak se na první pohled může zdát. Tyto weby si ukládají do databáze co největší počet nejrůznějších slov a jejich hashe. V momentě, kdy zadáte hash, program prohledá databázi, jestli se v ní nenachází vámi hledaný hash. Pokud ano zobrazí k němu přiřazené slovo.

2) Jestliže se někomu podaří stáhnout si z databáze seznam hesel, může na jejich prolomení použít útok hrubou silou nebo slovníkový útok. V prvním případě bude útočníkův program neustále generovat řetězce a zkoušet jestli se jejich hash shoduje s hashem, který se chystá prolomit. V druhém případě (slovníkový útok) se slova řetězce negenerují, ale kontrolují se s předem připraveným seznamem slov (slovníkem).

3) Pokud má více uživatelů stejná hesla, budou také stejné jejich hashe. Tím pádem stačí útočníkovi prolomit 1 hash a rázem má hesla ke všem uživatelům u kterých je hash stejný.

Prolomení hashe hrubou silou také závisí na složitosti hesla, jaké si dá uživatel. Jednoduchá hesla typu "1234" se dají rozluštit za pár sekund, naopak prolomení hesel kombinujících velká písmena, malá písmena a číslice př.: aKg8f60zBj může trvat až několik tisíc let. Za tu dobu s nimi útočník už moc škody nenadělá, protože bude dávno mrtvý. Stejně tak majitel hesla.

Kombinované hashování

Jedná se o nejbezpečnější a zároveň i nejsložitější způsob ochrany hesel.

K heslu se připojí řetězec. (nick uživatele, datum registrace, id uživatele...), a to celé se teprve zahashuje a uloží do databáze.

Jako ukázku si dáme uživatele s přezdívkou Pepa a heslem 123456. Hash řetězce 123456 by šel rozlousknout poměrně snadno avšak hash z řetězce "Pepa_123456" tak dobře rozluštit nepůjde, protože původní řetězec má daleko více znaků než samotné heslo. Navíc se kombinují různě velká písmena a číslice.

Není nutné tvořit kombinaci přesně ve tvaru "nick_heslo". Kombinaci si můžete zvolit zcela libovolně.

U přihlašování je samozřejmě nutné prvky před zahashováním poskládat stejně, jinak přihlašování nebude fungovat.

Shrnutí

Ze všech těchto metod bych asi nejvíc doporučil druhou. Heslo se zahashuje a uloží do databáze. Je to ideální kompromis mezi dobrým zabezpečením a jednoduchostí.

Samozřejmě pokud programujete e-shop nebo web, na kterém uživatel vyplňuje citlivé údaje, jako datum narození adresa atd. pak určitě použijte 3. metodu.

Statistiky
Autor  Autor: .:|IK|:.
Další články od tohoto autora >>>
  Přidáno: 2009-01-12 20:18:43   Přečteno: 859x
Hodnocení  Hodnocení: 0/10
Hodnotit článek mohou pouze přihlášení uživatelé
  Celkem hodnotilo 0 lidí
Komentářů  Komentářů: 1183 Číst/napsat komentář

Číst všechny komentáře >>> Komentáře (posledních 10)
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      UEmdPZmCjNtPN   2010-09-05 03:58:11

buy viagra in usa syynq
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      TGTJHUyYEz   03.09.2010 12:26:22

cialis 3877
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      ztgGmOUkMavEvHaGdq   03.09.2010 11:25:16

slots cwsoj car insurance =-) car insurance quotes 67857
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      mgiHZyITLfGx   03.09.2010 06:36:27

insurance homeowner :-)) slots 876054 online auto insurance zdq
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      cwRqdGJpblRn   03.09.2010 04:47:52

MWwBt3 <a href="http://aksapknyhlfg.com/">aksapknyhlfg</a>, vilfyhlrjbws, [link=http://xuqvzhgcdhsp.com/]xuqvzhgcdhsp[/link], http://kbkueqytxgjl.com/
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      pVyYuwRUdtq   03.09.2010 04:36:40

propecia >:[[[ levitra xzffvj levitra hls cialis lpoix
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      VzkPFlIikg   03.09.2010 04:04:05

SN4J5k <a href="http://zeydrwwyofjq.com/">zeydrwwyofjq</a>, yigfzjcflpyh, [link=http://iijqkekncpfd.com/]iijqkekncpfd[/link], http://hwbnyzuxzsab.com/
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      WMvliZXUz   03.09.2010 03:10:56

Valium 3138 Prednisone 8472 compare viagra cialis levitra =PP cialis 926 phentermine without prescription 43286
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      zNpybKlifrmcaJW   03.09.2010 01:54:27

six months ativan and zoloft 35250 ambien xqx order prednisone 8[[ tramadol 10844
Odkaz na tento příspěvek  Odkaz na tento příspěvek   Citovat  Citovat      DgUZcFqiiBmZgpkvYU   02.09.2010 05:13:18

home insurance 270 life insurance 615729 buy auto insurance online rbnr health insurance nyrly new jersey car insurance mezx